第六章 Oracle安全性
本章学习内容
? ? ? ? ? ?
创建和管理数据库用户账户 授予和撤销权限 创建和管理角色 创建和管理配置文件
实现数据库安全和最小权限原则 使用标准数据库审核
练习6-1 创建用户
在本练习中,将创建一些用户,本章其余练习将使用这些用户。假设有一个名为STOREDATA的永久表空间和一个名为TEMP的临时表空间。如果这些都不存在,请予以创建,或使用其它任何适当的表空间。
(1) 使用SQL*Plus,以具有充足权限(如SYSTEM或SYS)的用户身份连接到数据库。 (2) 创建三个用户: CREATE USER sales IDENTIFIED BY sales DEFAULT TABLESPACE storedata PASSWORD EXPIRE; --首次登录需要从新设置密码 CREATE USER webapp IDENTIFIED BY oracle DEFAULT TABLESPACE storedata QUOTA UNLIMITED ON storedata; --限制表空间使用大小 CREATE USER accounts IDENTIFIED BY oracle; 练习6-2 授予直接权限
在本练习中,将为【练习6-1】中创建的用户赋予一些权限,并证明这些权限已经生效。 (1) 使用SQL*Plus,以用户SYSTEM的身份连接到数据库。 (2) 为用户SALES授予CREATE SESSION权限。 GRANT CREATE SESSION TO sales; (3) 打开另一个SQL*Plus会话,以SALES的身份连接。此次登陆将会成功 SQL> connect sales/oracle (4) 以SALES的身份,尝试创建表:
CREATE TABLE t1(c1 DATE); ORA-01031: insufficient privileges 这将失败,并弹出消息“ORA-01031: insufficient privileges”。
(5) 在SYSTEM会话中,向SALES授予CREATE TABLE权限: SQL> grant create table to sales; (6) 在SALES会话中,再尝试一下:
CREATE TABLE t1(c1 DATE); ORA-01950: no privileges on tablespace 'STOREDATA' 这将失败,并弹出消息“ORA-01950: no privileges on tablespace 'STOREDATA'” (7) 在SYSTEM会话中,为SALES分配STOREDATA表空间的配额: ALTER USER sales QUOTA 1m ON storedata; (8) 在SALES会话中再次尝试。此次创建将会成功。 (9) 以SALES的身份,在新表上授予对象权限。 GRANT ALL ON t1 TO webapp; GRANT SELECT ON t1 TO accounts; (10) 以用户SYSTEM的身份连接到Database Control。 (11) 确认已经授予了对象权限。在数据库主页中,导航到Schema选项卡,然后单击
Database Objects部分中的Tables链接。输入“SALES”作为Schema,输入“T1”作为Table,并单击Go按钮。在Action下拉框中,选择Object Privileges。ACCOUNTS只有SELECT权限,WEBAPP拥有全部权限。注意,此窗口还显示是谁授予权限,而且它们都未被授予 WITH GRANT OPTION。
(12) 在Database Control中,确认为SALES授予了哪些权限。在数据库主页上,导航大
Server选项卡,然后单击Security部分中的User链接。选中SALES的单选按钮,并单击View按钮。您将看到,它有两个系统权限(CREATE SSESSION 和CREATE TABLE),而无ADMIN OPTION,在STOREDATA上有1MB的配额,除此无它。
(13) 使用SQL*Plus检索步骤(11)和步骤(12)中的相同信息。以SYSTEM的身份,
运行这些查询: SELECT grantee, PRIVILEGE, grantor, grantable FROM dba_tab_privs WHERE owner = 'SALES' AND table_name = 'T1' SELECT * FROM dba_sys_privs WHERE grantee='SALES'
(14) 撤销授予WEBAPP和ACOUNTS的权限: REVOKE ALL ON sales.t1 FROM webapp;
REVOKE ALL ON sales.t1 FROM accounts; 重新运行步骤(13)中的第一个查询确认撤销。 练习6-3 创建和授予角色
在本练习中,将创建一些角色,并把这些角色授予用户,演示其有效性。 (1) 使用SQL*Plus,以SYSTEM用户身份连接到数据库。 (2) 按一下方式创建两个角色
CREATE ROLE usr_role; CREATE ROLE mgr_role; (3) 为这些角色授予一些权限,并将USR_ROLE授予MGR_ROLE; GRANT CREATE SESSION TO usr_role; GRANT SELECT ON sales.t1 TO usr_role; GRANT usr_role TO mgr_role WITH ADMIN OPTION; GRANT ALL ON sales.t1 TO mgr_role; (4) 以用户SYSTEM的身份,将MGR_ROLE角色授予WEBAPP用户: GRANT mgr_role TO webapp; (5) 以用户WEBAPP的身份连接到数据库: conn webapp/oracle (6) 将角色USR_ROLE授予用户ACCOUNTS,并在SALES.T1中插入一行: GRANT usr_role TO accounts; INSERT INTO sales.t1 VALUES (SYSDATE); COMMIT; (7) 确认ACCOUNTS可以连接并查询SALES.T1,但无其它权限。紧跟其后的INSERT
语句会失败,并弹出错误消息“ORA-01031:insufficient privileges”。 SELECT * FROM sales.t1; INSERT INTO sales.t1 VALUES(SYSDATE); ORA-01031: insufficient privileges (8) 以用户SYSTEM的身份,对ACCOUNTS进行调整,使其可以在默认情况下登录,但无其它权限: CONNECT accounts/oracle GRANT CONNECT TO accounts; ALTER USER accounts DEFAULT ROLE CONNECT; (9) 演示角色的启动和禁用。SALES第一次尝试查询SALES.T1表时,将弹出“ORA-00942:table or view does not exist”错误。在启动USER_ROLE后,同样的查询将成功: CONNECT accounts/oracle; SELECT * FROM sales.t1; ORA-00942: table or view does not exist SET ROLE usr_role; SELECT * FROM sales.t1; (10) 使用Database Control来检查这些角色。在数据库主页上的导航路径是:在Server
选项卡上单击Security部分的Roles链接。单击两个新角色对应的链接来查看其权限。
(11) 要查看为谁授予了角色,在Actions下拉框中,选择Show Grantees选项,并单击
Go按钮。
(12) 使用下面的查询获取在步骤(10)和步骤(11)检索的同一个信息: SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE IN ('USR_ROLE', 'MGR_ROLE'); SELECT grantee, owner, table_name, PRIVILEGE, grantable FROM dba_tab_privs WHERE grantee IN ('USR_ROLE', 'MGR_ROLE') UNION ALL SELECT grantee, to_char(NULL), to_char(NULL), PRIVILEGE, admin_option FROM dba_sys_privs WHERE grantee IN ('USR_ROLE', 'MGR_ROLE') ORDER BY grantee;
练习6-4 创建和使用配置文件
在本练习中,将创建、分配和测试一个配置文件,此文件将实施一些口令控制。 (1) 通过SQL*Plus,以system用户的身份连接到数据库
(2) 创建一个配置文件,如果出现两次口令输入错误,那么将锁定账户:
CREATE PROFILE two_wrong LIMIT FAILED_LOGIN_ATTEMPTS 2; (3) 将新配置文件分配给SALES: ALTER USER sales PROFILE two_wrong; (4) 使SALES故意多次输入错误口令。在第三次尝试失败后,将得到“ORA-28000:the account is locked”消息: conn sales/xxxxxxx
(5) 以SYSTEM用户的身份,解除SALES账户的锁定: ALTER USER sales ACCOUNT UNLOCK; (6) 确定SALES此时可以连接: conn sales/oracle (7) 通过删除配置文件、角色和用户进行清理。在删除配置文件以便从SALES将其删除
时,以及在DROP USER命令上删除其表时使用了CASCADE。即使已将角色分配给用户,也可以删除角色。在删除表时,也将撤销在此表上授予的权限。 CONNECT SYSTEM/oracle; DROP PROFILE two_wrong CASCADE; DROP ROLE usr_role; DROP ROLE mgr_role; DROP USER sales CASCADE; DROP USER accounts; DROP USER webapp; 练习6-5 删除一些有潜在危险的权限
本练习将生成一个脚本(可能需要做一些编辑,具体取决于本地要求),以便从PUBLIC删除一些更具危险性的权限。此次使用SQL*Plus (1) 以用户SYSTEM的身份连接到数据库
(2) 编辑SQL*Plus,从其输出中删除无关的字符: set headers off; set pagesize 0; set feedback off; (3) 将输出打印到适当目录的文件中。下面是Unix和Windows系统中的示例: Spool $HOME/oracle/scripts/clear_public_privs.sql Spool c:\\oracle\\scripts\\clear_public_privs.sql (4) 通过运行以下语句生成SQL命令文件
SQL> set pagesize 0 SQL> set feedback off SQL> set feedback off SQL> spool clear_public_privs.sql Started select 'revoke execute on '||table_name||' from public;' from dba_tab_privs where table_name like 'UTL_%'; revoke execute on UTL_ALL_IND_COMPS from public; revoke execute on UTL_URL from public; revoke execute on UTL_TCP from public; revoke execute on UTL_SMTP from public; revoke execute on UTL_REF from public; spooling to d:\\Program Files\\PLSQL Developer\\clear_public_privs.sql
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库OCP认证考试指南全册Oracle Database 11g练习与知识点 - 图文(6)在线全文阅读。
相关推荐: