admin管理员组

文章数量:1532354

2023年12月15日发(作者:)

什么是权限:权限是用来招待某些特定SQL语句的权力(能力)。

权限又分为两类,它们分别为系统权限和对象权限。

1. 系统权限:访问(使用)数据库(系统资源)的权力(能力),使用户在数据库中能够执行一些特定的操作。

2. 对象权限:维护数据库中的对象的权力(能力),使用户能够访问和维护某一特定的对象。

DBA具有数据库系统中的一切系统权限并拥有所有的系统资源。DBA可以把这些权限的一些或全部授予其他的用户,也可以把这些系统资源的使用权授予其他的用户。

有关用户的系统权限:

1. CREATE USER:创建其他的用户(需要具有DBA角色的权限)。

2. ALTER USER:修改其他用户的设置。

3. DROP USER:删除其他的用户。

有关的系统权限:

1. SELECT ANY TABLE:查询任何用户的表中的数据和视图中的数据的权力。

2. UPDATE ANY TABLE:修改任何用户的表中的数据和视图中的数据的权力。

3. DELETE ANY TABLE: 删除任何用户的表中的数据和视图中的数据的权力。

4. CREATE ANY TABLE:在任何模式中创建表。

5. DROP ANY TABLE:删除任何模式中所创建的表。

6. ALTER ANY TABLE:修改任何模式中所创建的表。

7. CREATE TABLE:在用户自己的模式中创建表。

有关表空间的系统权限:

1. CREATE TABLESPACE:创建表空间的权限。

2. DROP TABLESPACE:删除表空间的权限。

3. ALTER TABLESPACE:修改表空间的权限。

4. UNLIMITED TABLESPACE:使用全部表空的权限。

有关索引的系统权限:

1. CREATE ANY INDEX:在任何模式中创建索引的权限。

2. DROP ANY INDEX:在任何模式中删除索引的权限。

3. ALTER ANY INDEX:在任何模式中个性索引的权限。

有关会话的系统的权限:

1. CREATE SESSION:连接数据库的权限。

2. ALTER SESSION:发ALTER SESSION语句的权限。

其他的系统权限:

1. CREATE VIEW:在用户自己的模式中创建视图的权限。

2. CREATE SEQUENCE:在用户自己的模式中创建序列号的权限。

3. CREATE PROCEDURE:在用户自己的模式中创建过程的权限。

授予系统权限:

首先让我们以system用户连接至数据库,因为只有具备数据库管理员的用户才能授/驳系统权限。

SQL> conn system/mcl

已连接。

SQL> create user dog

2 identified by wangwang;

用户已创建。

SQL> create user cat

2 identified by miaomiao;

用户已创建。

SQL> create user pig

2 identified by hengheng;

用户已创建。

SQL> create user fox

2 identified by loveyou;

用户已创建。

我们创建了一些用户为我们下面的实验做准备:

我们用CAT用户登录数据库,让我们来看看结果:

SQL> connect cat/miaomiao

ERROR:

ORA-01045: user CAT lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到 ORACLE。

结果显示CAT用户无法连接至数据库,因为这时CAT用户还没有任何权限,而登录数据库必须要有一个CREATE SESSION这个系统权限。

SQL> grant create session,select any table,create table,create view

2 to cat;

授权成功。

SQL> connect cat/miaomiao

已连接。

这时我们发现CAT用户已经可以连接至数据库。

CAT用户现在想将CREATE SESSION,SELECT ANY TABLE权限(一部分好处)分给它的狗友。

SQL> grant create session select any table to dog;

grant create session select any table to dog

*

第 1 行出现错误:

ORA-00990: 权限缺失或无效

我们发现CAT用户不能把“自己的好处”分配狗友,为了帮助CAT用户完成这件事,我们要在授权语句后加入WITH ADMIN OPTION。

SQL> grant create session,select any table,create table,create view

2 to cat with admin option;

授权成功。

SQL> select * from dba_sys_privs

2 where grantee='CAT';

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

CAT CREATE VIEW YES

CAT CREATE TABLE YES

CAT CREATE SESSION YES

CAT SELECT ANY TABLE YES

这时再让CAT用户把“自己的好处”给狗狗:

SQL> conn cat/miaomiao

已连接。

SQL> grant create session,select any table,create table,create view

2 to dog with admin option;

授权成功。

这是我们发现CAT用户可以把自己的权限授予DOG用户,同时还允许狗狗把得到的权限再授予其它用户(WITH ADMIN OPTION)。

SQL> connect dog/wangwang

已连接。

SQL> grant create session,select any table,create table,create view

2 to fox with admin option;

授权成功。

我们知道狗和猪不相容,因为在十二生肖排位中,狗黑了小猪“一刀“,为了补自己的过失狗狗要把自己的权限给小猪一些,但是不允许小猪将这些权限授予其它用户。

SQL> grant create session,select any table,create table,create view

2 to pig;

授权成功。

为了我们管理权限方便,这时我们需要查看一下所授予的权限和用户是否正确。

SQL> connect system/mcl

已连接。

SQL> select *

2 from dba_sys_privs

3 where grantee in ('CAT','DOG','FOX','PIG');

GRANTEE PRIVILEGE

------------------------------ ---------------------------------------- ---

CAT CREATE VIEW

CAT CREATE TABLE

CAT CREATE SESSION

CAT SELECT ANY TABLE

DOG CREATE VIEW

DOG CREATE TABLE

DOG CREATE SESSION

DOG SELECT ANY TABLE

FOX CREATE VIEW

FOX CREATE TABLE

FOX CREATE SESSION

GRANTEE PRIVILEGE

------------------------------ ---------------------------------------- ---

FOX SELECT ANY TABLE

PIG CREATE VIEW

PIG CREATE TABLE

PIG CREATE SESSION

PIG SELECT ANY TABLE

已选择16行。

回收系统权限:

Revoke {系统权限|角色名},[,{系统权限|角色名}]

From {用户名|角色名|PUBLIC} [,{用户名|角色名|PUBLIC}]

ADM

YES

YES

YES

YES

YES

YES

YES

YES

YES

YES

YES

ADM

YES

NO

NO

NO

NO

SQL> revoke create view from cat;

撤销成功。

我们来查看一下CAT的CREATE VIEW权限是否已经被回收:

SQL> select *

2 from dba_sys_privs

3 where grantee='CAT';

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

CAT CREATE TABLE YES

CAT CREATE SESSION YES

CAT SELECT ANY TABLE YES

我们知道CAT用户把CREATE VIEW授予了DOG,那CAT用户的这个CREATE VIEW权限被收回是否回影响到DOG用户呢?我们来看看:

SQL> select *

2 from dba_sys_privs

3 where grantee in('DOG','FOX','PIG');

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

DOG CREATE VIEW YES

DOG CREATE TABLE YES

DOG CREATE SESSION YES

DOG SELECT ANY TABLE YES

FOX CREATE VIEW YES

FOX CREATE TABLE YES

FOX CREATE SESSION YES

FOX SELECT ANY TABLE YES

PIG CREATE VIEW NO

PIG CREATE TABLE NO

PIG CREATE SESSION NO

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

PIG SELECT ANY TABLE NO

已选择12行。

我们看到除CAT大哥以外其它三个用户的系统权限仍然为原来的四个并不受CAT用户系统权限被回收的任何影响。此时尽管猫大哥已经被降职,但是它的狐朋狗友,连同狐朋狗友的难兄难弟却依然大权在握。即系统权限的回收不是级连的。

只有DBA用户可以查看其它用户权限,而当前用户只能查看自己的权限:

SQL> connect fox/loveyou

已连接。

SQL> select * from session_privs;

PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE TABLE

SELECT ANY TABLE

CREATE VIEW

这时FOX用户想偷偷的把CAT用户的CREATE SESSION权限驳回,我们看看它能不能够做到:

SQL> revoke create session from cat;

撤销成功。

这是我们发现FOX确定做到了,那让我们来检验一下:

SQL> connect cat/miaomiao

ERROR:

ORA-01045: user CAT lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到 ORACLE。

SQL> connect system/mcl

已连接。

SQL> select *

2 from dba_sys_privs

3 where grantee in ('CAT','DOG','FOX','PIG');

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

CAT CREATE TABLE YES

CAT SELECT ANY TABLE YES

DOG CREATE VIEW YES

DOG CREATE TABLE YES

DOG CREATE SESSION YES

DOG SELECT ANY TABLE YES

FOX CREATE VIEW YES

FOX CREATE TABLE YES

FOX CREATE SESSION YES

FOX SELECT ANY TABLE YES

PIG CREATE VIEW NO

GRANTEE PRIVILEGE ADM

------------------------------ ---------------------------------------- ---

PIG CREATE TABLE NO

PIG CREATE SESSION NO

PIG SELECT ANY TABLE NO

已选择14行。

注意:

在赋予用户系统权限时要非常谨慎,特别是使用WITH ADMIN OPTION子句时。在赋予用户系统权限时要使用最小化原则,即赋予用户的权限越小越好,只要够用就行,权力一定要牢牢地握在自己人手里,就像咱们的“千古一帝”,康熙大帝一样做到:“春蚕到死丝方尽”,不死不放权。这样才能真正有效地控制系统的安全。

对象权限:

EXECUTE

ALTER

SELECT

INSERT

UPDATE

DELETE

INDEX

REFERENCES

让我们来试试对象权限的授权和回收:

GRANT 对象的权限 |ALL[(列名[,列名…])]

ON 对象名

TO [用户名|角色名|PUBLIC]

[WITH GRANT OPTION]

其中:

1. 对象的权限:要授予的对象的权限。

2. ALL:所有对象的权限。

3. 列名:该列上的对象权限(要授予其他用户的)。

4. ON对象名:该对象上的对象权限将授予其他用户。

5. TO[用户名|角色名]:指明对象权限要授予 谁[某个用户|某个角色]。

6. PUBLIC:指明对象权限要授予系统的所有用户。

7. WHITH GRANT OPTION:允许被授予的用户再将这些对象权限授予其他用户。

为了我们以下的实验做些准备工作:

SQL> grant create session to cat;

授权成功。

SQL> revoke select any table

2 from cat,dog,pig,fox;

撤销成功。

SQL> conn / as sysdba

已连接。

SQL> grant execute on dbms_space_admin to system;

授权成功。

SQL> select *

2 from dba_tab_privs

3 where privilege like 'EX%'

4 and table_name like 'DBMS_SPACE_ADMIN%';

GRANTEE OWNER

GRANTOR

------------------------------ ------------------------------ ------------------------------ -------

SYSTEM SYS

SYS

SQL>connect scott/tiger

SQL> grant update(sal) on emp to cat;

授权成功。

SQL> grant update(job)

2 on emp to cat

3 with grant option;

授权成功。

TABLE_NAME

DBMS_SPACE_ADMIN

SQL> grant update(sal) on emp to cat;

授权成功。

SQL> grant update(job)

2 on emp to cat

3 with grant option;

授权成功。

SQL> select * from user_col_privs_made;

GRANTEE TABLE_NAME COLUMN_NAM GRANTOR

PRIVILEGE GRA

------------------------------ ---------- ---------- ------------------------------ ----------------

CAT EMP SAL SCOTT

UPDATE N

CAT EMP JOB SCOTT

UPDATE Y

SQL> connect cat/miaomiao

已连接。

SQL> grant update(job) on

2 to pig,dog

3 with grant option;

授权成功。

系统显示表明:授权语句已经成功地执行,这是因为SCOTT用户在为CAT用户授权的语句中使用了WITH GRANT OPTION子句。

SQL> grant update(sal) on to pig;

grant update(sal) on to pig

*

第 1 行出现错误:

ORA-01031: 权限不足

系统显示表明:授权语句没有被成功地执行,系统的错误信息显示为:“没有足够的权限”,这是因为SCOTT用户在将EMP表的SAL列的UPDATE(修改)权限授予CAT用户时没有使用WITH GRANT OPTION子句。

SQL> connect dog/wangwang

已连接。

SQL> grant update(job) on to fox;

授权成功。

系统显示表明:授权语句已经成功地执行,这是因为CAT用户在为DOG用户授权的语句中也使用了WITH GRANT OPTION子句。

以上的例子证明“WITH GRANT OPTION子句允许被授予的用户再将这些对象权限授予其他用户“。

SQL> connect scott/tiger

已连接。

SQL> col column_name for a10

SQL> col grantee for a10

SQL> col privilege for a10;

SQL> select * from user_col_privs_made;

GRANTEE TABLE_NAME COLUMN_NAM GRANTOR PRIVILEGE GRA

---------- ------------------------------ ---------- ------------------------------ ---------- ---

CAT EMP SAL SCOTT UPDATE NO

CAT EMP JOB SCOTT UPDATE YES

PIG EMP JOB CAT UPDATE YES

DOG EMP JOB CAT UPDATE YES

FOX EMP JOB DOG UPDATE NO

接下来让我们收回权限:

SQL> revoke update on emp from cat;

撤销成功。

SQL> select *

2 from user_col_privs_made;

未选定行

查询显示结果表明:CAT用户以及它的狐朋狗友和猪老弟的对象权限都不见了。这说明对象权限的回收是级连的。由于对象权限回收的这种特性,可能WITH GRANT OPTION子句的使用要比WITH ADMIN OPTION子句的使用对系统安全的冲击小一些。

注意:

在GRANT语句中使用权WITH GRANT OPTION选项还是非常谨慎。因为如果使用不当,可能会造成对该对象安全控制的失控。在赋予用户对象权限时还是要使用最小化原则,这样才不

至于在系统中留下任何安全的漏洞。

本文标签: 权限用户系统对象授予