授予用户和角色权限
使用 GRANT 语句和 ALTER USER 语句可以执行特定的权限授予操作。
向用户和角色授予系统或管理特权
在向用户和角色授予系统或管理特权之前,请了解这些类型权限的工作原理。
向用户和角色授予对象权限
您可以向用户和角色授予对象权限,并使被授权者能够向其他用户授予权限。
向用户和角色授予系统或管理特权
向用户授予系统特权需要使用alter语句指定。系统特权不能进行转授,需要有系统特权的用户进行授予。例如,授予用户test特权:
ALTER USER test CREATEROLE;
系统加载 sysprivilege 插件后,可以使用grant语句向用户授予any管理特权,需要使用超级用户授予any权限。例如,向用户u1授予创建所有表的权限:
CREATE USER sys WITH SUPERUSER;
SET SESSION AUTHORIZATION sys;
GRANT CREATE ANY TABLE TO u1;
向用户和角色授予对象权限
关于授予对象权限
您可以使用GRANT语句向角色和用户授予对象权限,对象权限可以转授。要授予对象特权,用户必须满足下列条件之一:
拥有指定的对象。
用户已被授予超级用户特权或者any管理特权。
用户被授予对象特权时指定WITH GRANT OPTION子句,拥有转授的权利。
例如,使用test用户把表orders上的所有可用特权授予给用户u1,并允许用户u1转授权限:
GRANT ALL PRIVILEGES ON orders TO u1 WITH GRANT OPTION;
然后通过系统视图,可查询表对象的授权情况:
SELECT grantee, grantor, privilege, grantable,table_name
FROM DBA_TAB_PRIVS
WHERE table_name='orders' and owner = 'test';
grantee |grantor |privilege |grantable |table_name |
--------+--------+-----------+----------+-----------+
u1 |test |REFERENCES |NO |orders |
u1 |test |SELECT |NO |orders |
u1 |test |UPDATE |NO |orders |
u1 |test |INSERT |NO |orders |
转授权限
如果指定了WITH ADMIN OPTION,成员接着可以把该角色中的成员关系授予给其他用户,也可以撤回该角色中的成员关系。如果没有管理选项,普通用户就不能做这些工作。一个角色不被认为持有自身的WITH ADMIN OPTION,但是它可以从一个会话用户匹配该角色的数据库会话中授予或撤回自身中的成员关系。数据库超级用户能够授予或撤回任何角色中任何人的成员关系。具有CREATEROLE 特权的角色能够授予或者撤回任何非超级用户角色中的成员关系。例如,如果表t1 被角色g1 拥有,u1 是它的一个成员,那么u1 可以把t1 上的特权授予给u2,但是那些特权将好像是直接由g1 授予的。角色g1 的任何其他成员可以稍后撤回它们。
列级授权
您可以对表中的各个列授予 INSERT、UPDATE、REFERENCES权限。例如,授予用户u1表orders的orderid和orderdate列插入权限:
GRANT INSERT (orderid,orderdate) ON orders TO u1;