访问控制
为什么要进行访问控制?
Oracle是一个多用户访问的数据库服务器,所以需要对不同的用户分配不同的权限。
创建用户
create user user_name identified by password;
修改用户密码
alter user user_name identified by new_password;
系统权限
分配系统权限
grant priv1[,priv2,...] to user | role | public;
privn: 表示权限的名称,有:
create session, 创建会话,可以让用户登录
create table, 创建表
create view, 创建视图
create sequence, 创建序列
unlimited tablespace, 不限制表空间的权限,在命令行界面下,有了create table权限,
还是不能创建表,因为没有使用表空间的权限。在授予这个权限就OK了。
user:表示用户
role:表示角色
public:表示所有用户
撤销用户权限
revoke priv1[,priv2,...] from user_name;
角色
角色是权限的集合。当用户数量较多时,需要对用户一个一个分配权限就显得麻烦了,使用角色会很方便的。
创建角色
create role role_name;
给角色分配权限
grant priv1[, priv2,...] to role_name;
将角色授予用户
grant role_name to user_name;
从用户上撤销角色
revoke role_name from user_name;
从角色上撤销权限
revoke priv1[,priv2,...] from role_name;
对象权限
grant priv1 on table_name to user_name;
将表的什么权限给与哪个用户。
常用的对象权限有:
insert, delete, update, select, index, alter, references,
撤销对象权限
revoke priv1 on table_name from user_name;
对表的权限控制可以精确到列(字段)上
grant privs(字段名) on table_name to user_name;
grant insert('name') on mytab to lisi;
将mytab表name字段的插入权限给与lisi用户。
revoke insert on mytab from lisi;
撤销这个对象权限。
权限的传递
系统权限的传递
grant create table to lisi with admin option;
将创建表的权限传给lisi用户,加上with admin option 表示lisi用户可以将这个权限再次传给其他用户。
revoke create table from lisi;
对象权限的传递
grant select on mytab to lisi with grant option;
带上with grant option的话,lisi用户就可以将select的对象权限传递给其他用户了。
revoke select on mytab from lisi;
数据字典视图
role_sys_privs 显示角色授予用户的系统权限
role_tab_privs 显示角色授予用户的对象权限
user_role_privs 显示用户拥有的角色
user_sys_privs 显示用户拥有的系统权限
user_tab_privs 显示用户拥有的对象权限
...