今天我们继续分享关于Oracle 数据库的一些相关的命令操作。
为了权限之间互相支配的方便,建议同时打开Oracle控制台和Developer界面进行命令操作;
一系列的命令如下:
创建新用户的命令
Create user 新用户名 identified by 密码;
授予用户创表的权限;
Grant create to 用户名
授予用户创建用户的权限;
Grant create user to 用户名;
假如system创建了一个新用户cz;
给用户cz授予查询自己表的权限
Grant select on scott.emp to cz with grant option;
撤销该查询权限
Revoke select on scott.emp from cz;
创建的新用户需要system授予登录的权限才可以登录;
用户的登录权限
Grant create session to 用户名;
Grant create session to 用户名 with admin option; (系统权限)
Grant create session to 用户名 with grant option; (对象权限)
撤销登录权限 revoke create session from 用户名;
Oracle 权限传递
权限传递的前提:
1, 自己具有该权限,
2, 权限配置的权限
With admin option(系统权限)
With grant option(对象权限)
用户cz登录后,依上操作,在cz用户下新建用户waj。
因为waj表为cz下的子表。
假设system撤销cz查询scott.emp表的权限,那么waj是否也没有了该查询权限?
经过撤销cz查询scott.emp表权限后,waj也不能查询
但是我们发现,当撤销cz的登录时,我们conn waj/123456 登录waj,依然可以连接。
这个是什么原因导致的呢?
原因:在权限回收的时候,如果对象权限回收会连带取消,如果是系统权限则不会连带取消。
这里查询权限属于对象级别的,登录则属于系统级别的。
角色:
一组权限,为了方便授权DBA,CONNECT,RESOURCE 记得都要大写
dba
Resource
connect
打开sql+window
查询角色拥有的所有权限(system用户)
select * from scott.emp;
--查询所有的角色
--DBA,CONNECT,RESOURCE 记得都要大写
select * from dba_roles;
--查询某个角色的系统权限
select * from dba_sys_privs where grantee='DBA';
--查询某个角色的对象权限
select * from dba_tab_privs where grantee='DBA';
--查询某个角色的角色权限
select * from dba_role_privs where grantee='CONNECT';
Oracle自定义角色
创建角色
Create role 角色名;
假设我们这里创建的角色为myrole,
system授予角色查询scott.emp 表的权限 (可控制台授权一系列命令)
Grant select on scott.emp to myrole;
授予角色myrole 的RESOURCE的权限
Grant RESOURCE to myrole;
授予cz创表的空间
Grant unlimited tablespace to cz;
撤销cz的创建表权限
Revoke create table from cz;
Oracle授权命令
grant 权限/角色 to 用户名/角色
Oracle撤销命令
revoke 权限/角色 from 权限/角色
授予myrole的dba角色权限
Grant dba to myrole;
撤销myrole 的resource和dba角色权限
revoke dba from myrole;
下面做一个测试:
system给cz授予dba角色权限 grant dba to cz;
删除用户: drop 用户名;
cz给waj授予dba角色权限 grant dba to waj;
然后我们连接waj 删除cz用户drop user cz;
结果成功了,waj删除自己却不能成功。
结果证明:像dba这些高级权限,不要轻易授予其他用户,否则它可能反过来删除自己。
就相当于农夫与蛇的故事,最终结局还是挺悲催的。
好啦,今天分享到这里啦。