用户权限与安全.ppt
第12章 用户权限与安全,12.1 数据库安全性概述12.2 用户管理12.3 用户配置文件12.4 权限管理12.5 角色管理12.6 审计,2,本章要点,掌握用户的创建与管理了解用户配置文件的作用掌握如何使用用户配置文件限制用户使用的资源了解Oracle中的权限理解系统权限与对象权限的区别了解角色与权限的区别掌握角色的创建与管理掌握如何为角色授予权限掌握如何为用户授予权限或角色,12.1 数据库安全性概述,数据库的安全性主要包括两个方面的含义:一方面是防止非法用户对数据库的访问,未授权的用户不能登录数据库;另一方面是每个数据库用户都有不同的操作权限,只能进行自己权限范围内的操作。Oracle数据安全控制机制 用户管理权限管理 角色管理 表空间设置和配额 用户资源限制数据库审计,3,Oracle数据库的安全可以分为两类:系统安全性系统安全性是指在系统级控制数据库的存取和使用的机制,包括有效的用户名与口令的组合、用户是否被授权可连接数据库、用户创建数据库对象时可以使用的磁盘空间大小、用户的资源限制、是否启动了数据库审计功能,以及用户可进行哪些系统操作等。数据安全性数据安全性是指在对象级控制数据库的存取和使用机制,包括用户可存取的模式对象和在该对象上允许进行的操作等。,4,12.2 用户管理,创建用户修改用户删除用户管理用户会话,5,Oracle数据库初始用户 SYS:是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典;SYSTEM:是一个辅助的数据库管理员,不能启动和关闭数据库,但可以进行其他一些管理工作,如创建用户、删除用户等。SCOTT:是一个用于测试网络连接的用户,其口令为TIGER。,6,7,12.2.1 创建用户,创建用户需要使用CREATE USER语句,其语法如下:CREATE USER user_name IDENTIFIED BY password DEFAULT TABLESPACE default_tablespace_name TEMPORARY TABLESPACE tomporary_tablespace_name QUOTA quota K|M|UNLIMITED ON tablespace_name,.PROFILE profile_name PASSWORD EXPIRE ACCOUNT LOCK|UNLOCK;,创建数据库用户示例,创建用户需要具有CREATE USER权限,下列语句将创建一个user3用户,口令为user3,默认表空间为USERS,在该表空间的配额为10 MB,初始状态为锁定。CREATE USER user3 IDENTIFIED BY user3 DEFAULT TABLESPACE users QUOTA 10M ON usersACCOUNT LOCK;,创建数据库用户示例,2.创建一个用户wang,口令为wang,默认表空间为users,在该表空间的配额为10 MB。口令设置为过期状态,即首次连接数据库时需要修改口令。配置文件为example_profile(假设该配置文件已经创建)。CREATE USER wang IDENTIFIED BY wang DEFAULT TABLESPACE users QUOTA 10M ON usersPROFILE example_profile PASSWORD EXPIRE;注意:在创建新用户后,必须为用户授予适当的权限,用户才可以进行相应的数据库操作。例如,授予用户CREATE SESSION权限后,用户才可以连接到数据库。,10,12.2.2 修改用户,对创建好的用户可以使用ALTER USER语句进行修改,修改时可以针对用户不同的参数。修改用户的口令ALTER USER user3 IDENTIFIED BY newuser3;修改用户口令为过期ALTER USER user3 PASSWORD EXPIRE;说明:如果用户口令是过期状态,则使用该用户连接数据库时,Oracle将强制用户更新口令。修改用户的状态为锁定或解锁ALTER USER user3 ACCOUNT LOCK;ALTER USER user3 ACCOUNT UNLOCK;,4.将用户user3的口令修改为newuser3,同时将该用户解锁。ALTER USER user3 IDENTIFIED BY newuser3 ACCOUNT UNLOCK;5.修改用户wang的默认表空间为myspace,在该表空间的配额为20 MB,在users表空间的配额为10 MB。ALTER USER wangDEFAULT TABLESPACE myspace QUOTA 20M ON myspace QUOTA 10M ON users;,12,12.2.3 删除用户,基本语法DROP USER user_name CASCADE;说明如果该用户已经在数据库中创建了内容,则必须指定CASCADE关键字,表示在删除该用户的同时,删除该用户创建的所有内容。示例DROP USER users;DROP USER users CASCADE;,13,12.2.4 管理用户会话,1监视用户会话信息Oracle提供了动态视图v$session,通过该视图可以了解当前数据库中的用户会话信息(参见教材P267)。2终止用户会话数据库管理员可以在需要的时候使用ALTER SYSTEM语句终止用户的会话,其语法形式如下:ALTER SYSTEM KILL SESSION sid,serial#;其中,sid与serial#的值可以通过查询动态视图v$session获得。例如:ALTER SYSTEM KILL SESSION 136,341;,查询用户信息,ALL_USERS:包含数据库所有用户的用户名、用户ID和用户创建时间DBA_USERS:包含数据库所有用户的详细信息USER_USERS:包含当前用户的详细信息DBA_TS_QUOTAS:包含所有用户的表空间配额信息USER_TS_QUOTAS:包含当前用户的表空间配额信息V$SESSION:包含用户会话信息V$OPEN_CURSOR:包含用户执行的SQL语句信息,15,12.3 用户配置文件,配置文件(PROFILE)是数据库和系统资源限制的集合,是Oracle数据库安全策略的重要组成部分。利用配置文件,可以限制用户对数据库和系统资源的使用,同时还可以对用户口令进行管理。在Oracle数据库创建的同时,系统会创建一个名为DEFAULT的默认配置文件。如果没有为用户显式地指定一个配置文件,系统默认将DEFAULT配置文件作为用户的配置文件。,资源限制级别和类型,资源限制级别会话级资源限制:对用户在一个会话过程中所能使用的资源进行限制。调用级资源限制:对一条SQL语句在执行过程中所能使用的资源进行限制。资源限制类型CPU使用时间;逻辑读;每个用户的并发会话数;用户连接数据库的空闲时间;用户连接数据库的时间;私有SQL区和PL/SQL区的使用。,17,12.3.1 创建用户配置文件,系统管理员也可以自行创建配置文件。创建配置文件需要使用CREATE PROFILE语句,其语法参见教材P268。创建一个名为pwd_profile的配置文件,如果用户连续4次登录失败,则锁定该账户,10天后该账户自动解锁。CREATE PROFILE pwd_profile LIMIT FAILED_LOGIN_ATTEMPTS 4PASSWORD_LOCK_TIME 10;,创建用户配置文件的示例,创建一个名为res_profile的配置文件,要求每个用户最多可以创建4个并发会话;每个会话持续时间最长为60分钟;如果会话在连续20分钟内空闲,则结束会话;每个会话的私有SQL区为100 KB;每个SQL语句占用CPU时间总量不超过10秒。CREATE PROFILE res_profile LIMITSESSIONS_PER_USER 4CONNECT_TIME 60 IDLE_TIME 20 PRIVATE_SGA 100K CPU_PER_CALL 100;,19,将配置文件分配给用户,可以在创建用户时为用户指定配置文件CREATE USER zhangsan IDENTIFIED BY 12345 PROFILE res_profile;也可以在修改用户时为用户指定配置文件。ALTER USER zhangsan PROFILE pwd_profile;除此之外,要想让配置文件生效,还需要将参数resource_limit的值改为TRUE(可使用SHOW PARAMETER语句查看该参数)。具体语句如下:ALTER SYSTEM SET resource_limit=TRUE;,20,12.3.3 查看配置文件信息,通过数据字典dba_profiles,可以查看系统默认配置文件DEFAULT和自行创建的用户配置文件的参数设置。例如,查看系统默认配置文件DEFAULT的参数设置情况,查询语句如下:SELECT profile,resource_name,limitFROM dba_profiles WHERE profile=DEFAULT;其中,profile表示配置文件名;resource_name表示参数名;limit表示参数值。,21,12.4 权限管理,一个新的用户被创建后,该用户还无法操作数据库,还需要为该用户授予相关的权限。权限是指在数据库中执行某种操作的权力,例如连接数据库、在数据库中创建与操作数据库对象等权限。Oracle中的权限主要分为系统权限与对象权限。系统权限(一般由数据库管理员授予)是指对整个Oracle系统的操作权限,例如连接数据库、创建与管理表或视图等。对象权限(可由数据库管理员、对象所有者授予)是指用户对数据库中对象的操作权限,例如对某一个表的插入、修改和删除记录等权限,22,12.4.1 系统权限,通过数据字典system_privilege_map可以查看Oracle中的系统权限,其中常用的系统权限如表12-1所示(参见教材P272)。系统权限授予时需要注意的几点:应用程序开发者一般需要拥有CREATE TABLE、CREATE VIEW和CREATE INDEX等系统权限。普通用户一般只具有CREATE SESSION系统权限。只有授权时带有WITH ADMIN OPTION子句时,用户才可以将获得的系统权限再授予其他用户,即系统权限的传递性。,23,授予系统权限,向用户授予系统权限需要使用GRANT语句,其语法如下:GRANT system_privilege,.TO user_name,.|role_name,.|PUBLIC WITH ADMIN OPTION;示例:SQL GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO user1;SQL CONNECT system/manager SQL GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO user2 WITH ADMIN OPTION;SQL CONNECT user2/user2SQL GRANT CREATE TABLE TO li;,12.4.1 系统权限,查看用户的系统权限可通过数据字典user_sys_privs和dba_sys_privs查看用户哪些系统权限。字段含义如下:Username:用户名。privilege:用户拥有的系统权限。admin_option:用户是否有权力将该权限授予其他用户。其值为YES表示有,为NO表示没有。,25,撤消系统权限,撤消用户的权限需要使用REVOKE语句,其语法如下:REVOKE system_privilege,.FROM user_name,.|role_name,.|PUBLIC;示例:SQL REVOKE CREATE VIEW FROM user1;SQL GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO user2 WITH ADMIN OPTION;SQL CONNECT user2/user2SQL GRANT CREATE SESSION TO li;SQL CONNECT system/managerSQL REVOKE CREATE SESSION FROM user2;请问:li是否有CREATE SESSION 权限?,26,12.4.2 对象权限,Oracle中的常见对象与其对象权限之间的对应关系如表12-2所示(参见教材P275)。1授予对象权限授予对象权限同样需要使用GRANT语句,其语法如下:GRANT object_privilege,.|ALL PRIVILEGES ON object_nameTO user_name,.|role_name,.|PUBLIC WITH GRANT OPTION;2撤消对象权限撤消对象权限也需要使用REVOKE语句,其语法如下:REVOKE object_privilege,.|ALL PRIVILEGES ON object_nameFROM username,.|role_name,.|PUBLIC;,对象权限的授权和收权示例,SQLGRANT ALL ON scott.emp TO user1;SQLGRANT SELECT(deptno,dname)ON dept TO user2;SQL GRANT SELECT,INSERT,UPDATE ON scott.emp TO user2 WITH GRANT OPTION;SQL CONNECT user2/user2SQL GRANT SELECT,UPDATE ON scott.emp TO li;SQL CONNECT scott/tigerSQL REVOKE UPDATE ON scott.emp FROM user1;SQL REVOKE SELECT ON scott.emp FROM user2;请问:li是否有查询emp表的权限?,WITH ADMIN OPTION与WITH GRANT OPTION比较,WITH ADMIN OPTION当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限仍然存在WITH GRANT OPTION当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限也被回收。,WITH ADMIN OPTION,DBA,GRANT,REVOKE,Jeff,Emi,Jeff,Emi,DBA,GRANT,REVOKE,WITH GRANT OPTION,Bob,Jeff,Emi,Emi,Jeff,Bob,与对象权限相关的数据字典,DBA_TAB_PRIVS:包含数据库所有对象的授权信息USER_TAB_PRIVS:包含当前用户对象的授权信息DBA_COL_PRIVS:包含所有字段已授予的对象权限信息USER_COL_PRIVS:包含当前用户所有字段已授予的对象权限信息参见教材P278,32,12.5 角色管理,所谓角色就是一系列相关权限的集合。分类:预定义角色自定义角色,预定义角色,预定义角色是指在Oracle数据库创建时由系统自动创建的一些常用的角色,这些角色已经由系统授予了相应的权限。DBA可以直接利用预定义的角色为用户授权,也可以修改预定义角色的权限。Oracle数据库中有30多个预定义角色。可以通过数据字典视图DBA_ROLES查询当前数据库中所有的预定义角色,通过DBA_SYS_PRIVS查询各个预定义角色所具有的系统权限。,35,12.5.1 创建角色,创建角色需要使用CREATE ROLE语句,并要求用户具有CREATE ROLE权限。其语法如下:CREATE ROLE role_name NOT IDENTIFIED|IDENTIFIED BY password;参数说明role_name:创建的角色名。NOT IDENTIFIED:用于指定该角色由数据库授权,使该角色生效时不需要口令;默认为NOT IDENTIFIED,即无口令。IDENTIFIED BY password:用于设置角色生效时的认证口令。,创建不同类型的角色示例,SQL CREATE ROLE high_manager_role;SQL CREATE ROLE middle_manager_role IDENTIFIED BY middlerole;SQL CREATE ROLE low_manager_role IDENTIFIED BY lowrole;,37,12.5.2 为角色授予权限,新创建的角色还不具有任何权限,可以使用GRANT语句向该角色授予权限,其语法形式与向用户授予权限基本相同。示例SQL GRANT CONNECT,CREATE TABLE,CREATE VIEW TO low_manager_role;SQL GRANT CONNECT,RESOURCE,DBA TO high_manager_role;SQL GRANT ALL ON scott.emp TO high_manager_role;SQL REVOKE CONNECT FROM low_manager_role;SQL REVOKE UPDATE,DELETE,INSERT ON scott.emp FROM high_manager_role;,38,12.5.3 为用户授予角色,语法GRANT role_list TO user_list|role_list;例如,将CONNECT,high_manager_role角色授予用户user1,将RESOURCE,CONNECT角色授予角色middle_manager_role。SQL GRANT CONNECT,high_manager_role TO user1;SQL GRANT RESOURCE,CONNECT TO middle_manager_role;,39,12.5.4 修改用户的默认角色,修改用户的默认角色时需要使用ALTER USER语句,其语法形式如下:ALTER USER user_name DEFAULT ROLE role_name,.|ALL EXCEPT role_name,.|NONE;语法说明如下。role_name:角色名。ALL:将用户的所有角色设置为默认角色。EXCEPT:将用户的除某些角色以外的所有角色设置为默认角色。NONE:将用户的所有角色都设置为非默认角色。,40,12.5.5 管理角色,1设置角色的口令使用ALTER USER语句可以重新设置角色的口令,包括删除口令、添加口令和修改口令,其语法形式如下:ALTER ROLE role_name NOT IDENTIFIED|IDENTIFIED BY new_password;示例:SQL ALTER ROLE high_manager_role IDENTIFIED BY highrole;SQL ALTER ROLE middle_manager_role NOT IDENTIFIED;,12.5.5 管理角色,2禁用与启用角色禁用与启用角色需要使用SET ROLE语句,其语法如下:SET ROLE role_name IDENTIFIED BY password,.|ALL EXCEPT role_name,.|NONE;参数说明role_name:表示进行生效或失效设置的角色名称;IDENTIFIED BY password:用于设置角色生效或失效时的认证口令ALL:表示使当前用户所有角色生效;EXCEPT role_name:表示除了特定角色外,其余所有角色生效;NONE:表示使当前用户所有角色失效。,示例,SQL SET ROLE NONE;SQL SET ROLE high_manager_role IDENTIFIED BY highrole;SQL SET ROLE middle_manager_role,low_manager_low IDENTIFIED BY lowrole;SQL SET ROLE ALL EXCEPT low_manager_role,middle_manager_role;,43,12.5.5 管理角色,3删除角色删除角色需要使用DROP ROLE语句,其语法形式如下:DROP ROLE role_name;说明如果某个角色不再需要,则可以使用DROP ROLE语句删除角色。角色被删除后,用户通过该角色获得的权限被回收。,44,12.5.6 与角色相关的数据字典,如果要了解用户拥有哪些角色,以及角色中包含哪些权限,可以查看如表12-4所示的数据字典视图。,12.6 审计,审计概述 语句审计 权限审计 对象审计,12.6.1 审计概述,审计的概念 审计分类 审计的启动,1.审计的概念,审计是监视和记录用户对数据库所进行的操作,以供DBA进行统计和分析。利用审计可以完成下列任务:调查数据库中的可疑活动。监视和收集特定数据库活动的数据。一条审计记录中包含用户名、会话标识、终端标识、所访问的模式对象名称、执行的操作、操作的完整语句代码、日期和时间戳、所使用的系统权限等。,2.审计分类,语句审计(Statement Auditing):对特定的SQL语句进行审计,不指定具体对象。权限审计(Privilege Auditing):对特定的系统权限使用情况进行审计。对象审计(Object Auditing):对特定的模式对象上执行的特定语句进行审计。精细审计(Fine-Grained Auditing,FGA):对基于内容的各种SQL语句进行审计,可以使用布尔表达式对列级别上的内容进行审计。,根据用户执行的语句是否成功,审计分为:成功执行语句的审计不成功执行语句的审计无论语句是否执行成功都进行审计根据对同一个语句审计次数的不同,审计分为:会话级审计:对某一个用户或所有用户的同一个语句只审计一次,形成一条审计记录;存取方式审计:对某一个用户或所有用户的同一个语句每执行一次便审计一次,即同一条语句形成多个审计记录。,3.审计的启动,通过修改静态参数AUDIT_TRAIL值来启动或关闭数据库的审计功能。AUDIT_TRAIL参数可以取值:为DB,OS,NONE,TRUE,FALSE,DB_EXTENDED,XML或EXTENDED。DB表示启动审计功能,审计信息写入SYS.AUD$数据字典中OS表示启动审计功能,审计信息写入操作系统文件中默认为NONE,表示不启动审计功能TRUE功能与DB选项一样FALSE表示不启动审计功能,但Oracle会监视特定活动并写入操作系统文件,如例程的启动、关闭以及DBA连接数据库等,通过SQL*Plus环境启动数据库的审计功能。SQL ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE;SQL SHUTDOWN IMMEDIATESQL STARTUP 通过OEM数据库控制台启动数据库的审计功能。,12.6.2 语句审计,概念语句审计是指对特定类型的SQL语句进行审计,与具体的对象没有关系。可以审计某个用户或所有用户的SQL语句;可以是会话级审计或存取方式审计;可以对成功执行的SQL语句、没有成功执行的SQL语句或无论是否成功执行的SQL语句进行审计。语句审计的基本语法为AUDIT sql_statement|sql_statement_option BY user1,user2BY SESSION|ACCESSWHENEVER NOT SUCCESSFUL,参数说明sql_statement:被审计的SQL语句sql_statement_option:被审计的SQL语句选项BY user:指定审计的用户,如果没有指定,则审计所有用户;BY SESSION:语句级审计,同一个SQL语句只审计一次(默认);BY ACCESS:存取方式审计,同一个SQL语句执行几次审计几次;WHENEVER SUCCESSFUL:只审计成功的SQL语句;WHENEVER NOT SUCCESSFUL:只审计不成功的SQL语句。,示例,AUDIT TABLE BY scott BY ACCESS;SQLAUDIT VIEW BY scott BY SESSION;SQLAUDIT ALTER TABLE BY scott,sfd BY SESSION WHENEVER SUCCESSFUL;SQLAUDIT SESSION BY sfd;SQLCONN scott/tigerSQLCREATE TABLE test_audit(sno NUMBER,sname CHAR(20);SQLALTER TABLE test_audit ADD(sex CHAR(2);SQLCONN/AS SYSDBASQLSELECT*FROM aud$;,如果要了解当前数据库对哪些用户进行了语句审计,以及审计设置信息,可以通过查询数据字典视图DBA_STMT_AUDIT_OPTS获得。SELECT user_name,audit_option,success FROM dba_stmt_audit_opts;取消对某个语句的审计,只需将AUDIT命令改为NOAUDIT命令就可以了。,12.6.3 权限审计,概念权限审计是指对特定系统权限的使用情况进行审计。语法AUDIT system_privilegeBY user1,user2BY SESSION|ACCESSWHENEVER NOT SUCCESSFUL示例AUDIT CREATE ANY TABLE,CREATE ANY VIEW BY scott,sfd;AUDIT ALTER ANY TABLE BY sfd BY SESSION WHENEVER SUCCESSFUL;,如果要了解当前数据库对哪些用户的系统权限进行了审计以及审计设置信息,可以通过查询数据字典DBA_PRIV_AUDIT_OPTS获得。SELECT user_name,privilege,success FROM dba_priv_audit_opts;取消对某个系统权限的审计,只需将AUDIT命令改为NOAUDIT命令就可以了。,12.6.4 对象审计,概念对象审计是指对特定模式对象执行的特点操作进行审计,与用户没有关系。语法为AUDIT object_privilege ON schema.object_nameBY user1,user2BY SESSION|ACCESSWHENEVER NOT SUCCESSFUL参数说明object_privilege:特定的对象权限schema.object_name:特定模式对象。,对scott模式下的emp表、dept表进行审计。AUDIT SELECT,UPDATE ON scott.emp BY ACCESS;AUDIT INSERT,DELETE ON scott.dept BY SESSION WHENEVER NOT SUCCESSFUL;如果要了解当前数据库对哪些模式对象进行了审计以及审计设置信息,可以通过查询数据字典视图DBA_OBJ_AUDIT_OPTS获得。SELECT owner,object_type,ins,upd,sel,del FROM dba_obj_audit_opts;,如果要取消对某个模式对象的审计,只需将AUDIT命令改为NOAUDIT命令就可以了。,