with admin option 、with grant option的用法--根本就是授权/取消是否级联
with admin option是用在系统权限上的,with grant option是用在对象权限上的。
SQL语句:
GRANT CREATE SESSION TO emi WITH ADMIN OPTION;
GRANT CREATE SESSION TO role WITH ADMIN OPTION;
GRANT role1 to role2 WITH ADMIN OPTION;
GRANT select ON customers1 TO bob WITH GRANT OPTION;
GRANT select ON customers1 TO hr_manager(role) WITH GRANT OPTION;
例如:grant create any table to global with admin option;
此句中的with admin option是什么意思?
(级联的意思就是第一个用户的权限再授予其他用户,如果第一个用户被取消了该权限,那么通过其他通过第一个用户授予该权限的用户也被波及到,权限同时被取消,不级联的话其他用户就不会被波及。)
1、with admin option
with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。
如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限。但管理员可以显式收回B create session的权限,即直接revoke create session from B.
2、with grant option
with grant option的意思是:权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
GRANT的权限说明
名称
GRANT— 赋予一个用户,一个组或所有用户访问权限
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
输入
privilege
可能的权限有:
SELECT
访问声明的表/视图的所有列/字段.
INSERT
向声明的表中插入所有列字段.
UPDATE
更新声明的所有列/字段.
DELETE
从声明的表中删除所有行.
RULE
在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL
赋予所有权限.
object
赋予权限的对象名.可能的对象是:
table (表)
view (视图)
sequence (序列)
index (索引)
PUBLIC
代表是所有用户的简写.
GROUP group
将要赋予权限的组 group .目前的版本中,组必须是用下面方法显式创建的.
username
将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
输出
CHANGE
如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所声明的对象不可用或不可能对声明的组或用户赋予权限.
描述
GRANT允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限.
一旦用户有某对象的权限,他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限.
注意
目前,要想在 Postgres 里面只赋予几列权限,你必须创建一个包含那几列的视图(view),然后把权限赋予那几个视图。
使用 psql \z 命令获取关于现存对象权限的更多信息:
Database = lusitania +------------------+---------------------------------------------+ | Relation | GRANT/Revoke Permissions | +------------------+---------------------------------------------+ | mytable | {"=rw","miriam=arwR","group todos=rw"} | +------------------+---------------------------------------------+ Legend: uname=arwR -- privileges granted to a user group gname=arwR -- privileges granted to a GROUP =arwR -- privileges granted to PUBLIC r -- SELECT w -- UPDATE/DELETE a -- INSERT R -- RULE arwR -- ALL
小技巧: 目前,要创建一个 GROUP (组), 你将不得不手工向表 pg_group 中插入数据,像:
INSERT INTO pg_group VALUES ('todos');CREATE USER miriam IN GROUP todos;
参考 REVOKE 语句重新分配访问权限.
用法
给所有用户向表 films 插入记录的权限:
GRANT INSERT ON films TO PUBLIC;
赋予用户 manuel 操作视图 kinds 的所有权限:
GRANT ALL ON kinds TO manuel;
兼容性
SQL92
SQL92 GRANT 语法允许对表中的某单独列/字段设置权限,并且允许设置一权限以赋予别人相同权限.
GRANT privilege [, ...] ON object [ ( column [, ...] ) ] [, ...] TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
这些字段与 Postgres 实现是兼容的,除了下面一些例外:
privilege
SQL92 允许声明附加的权限:
SELECT
REFERENCES
允许在一个声明的表的整合约束中使用某些或全部列/字段.
USAGE
允许使用一个域,字符集,集合或事务.如果声明的对象不是表/视图, privilege 只能声明为 USAGE.
object
[ TABLE ] table
SQL92 允许一个附加的非函数关键字 TABLE.
CHARACTER SET
允许使用声明的字符集.
COLLATION
允许使用声明的集合序列.
TRANSLATION
允许使用声明的字符集转换.
DOMAIN
允许使用声明的域.
WITH GRANT OPTION
允许向别人赋予同样权限
REVOKE
Name
REVOKE -- 删除访问权限.Synopsis
REVOKE { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] object [, ...]
FROM { username | GROUP groupname | PUBLIC } [, ...]
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION funcname ([type, ...]) [, ...]
FROM { username | GROUP groupname | PUBLIC } [, ...]
REVOKE { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE langname [, ...]
FROM { username | GROUP groupname | PUBLIC } [, ...]
描述
REVOKE 允许一个对象的创建者撤销以前 赋予(别人)的权限,可以是撤销一个或多个用户或者一组用户的权限. 关键字 PUBLIC 代表隐含定义的拥有所有用户的组.
请注意,任何特定的用户都将拥有直接赋予他/她的权限,加上 他/她所处的任何组,以及再加上赋予 PUBLIC 的权限的总和.因此,举例来说,废止 PUBLIC 的 SELECT 权限并不意味着所有用户都失去了对该对象的 SELECT 权限∶ 那些直接得到权限赋予的以及通过一个组得到权限的人仍然拥有该权限.
参阅 GRANT 命令的描述获取权限类型的 含义.
注意
使用 psql 的 \z 命令 显示在一个现存对象上赋予的权限.又见 GRANT 获取关于格式的信息.
例子
撤销公众在表 films 上的插入权限∶
REVOKE INSERT ON films FROM PUBLIC;
废除用户 manuel 对视图 kinds 的所有权限∶
REVOKE ALL PRIVILEGES ON kinds FROM manuel
以下来源:
http://www.adp-gmbh.ch/ora/misc/users_roles_privs.html
Privileges
System privileges
select name from system_privilege_map
- create session (A user cannot login without this privilege. If he tries, he gets an ORA-01045).
- create table
- create view
- create procedure
- sysdba
- sysoper
Object privileges
- Tables
select, insert, update, delete, alter, debug, flashback, on commit refresh, query rewrite, references, all - Views
select, insert, update, delete, under, references, flashback, debug - Sequence
alter, select - Packeges, Procedures, Functions (Java classes, sources...)
execute, debug - Materialized Views
delete, flashback, insert, select, update - Directories
read, write - Libraries
execute - User defined types
execute, debug, under - Operators
execute - Indextypes
execute
Public
Users
Roles
Predefined Roles
- connect, resource, dba
These might not be created anymore in future versions of Oracle.
Oracle 9.2 grants create session, alter session, create synonym, create view, create database link, create table, create cluster and create sequence to connect.
It also grants create table , create cluster, create sequence, create trigger create procedure, create type, create indextype and create operator to resource.
The role dba gets basically everything and that with admin option. - delete_catalog_role, execute_catalog_role, select_catalog_role
Accessing data dictionary views (v$ views and static dictionary views) - exp_full_database, imp_full_database
This role is needed to export objects found in another user's schema. - aq_user_role, aq_administrator_role, global_aq_user_role(?)
- logstdby_administrator
- snmpagent
- recovery_catalog_owner
- hs_admin_role
- oem_monitor, oem_advisor
- scheduler_admin
- gather_system_statistics
- plustrace
- xdbadmin
- xdbwebservices
- ctxapp