分配数据库权限
拥有数据库系统权限才能执行连接数据库,创建和修改对象之类的任务。Oracle中有数百种系统权限。查询DBA_SYS_PRIVS视图可以查看系统权限:
select distinct privilege from dba_sys_privs;
可以将权限赋予其他用户或角色。要拥有赋予权限的能力,必须拥有GRANT ANY PRIVILEGE 权限,或者通过with admin option 子句获得系统权限。
使用GRANT语句可以为用户赋予系统权限。
赋予用户CREATE SESSION 权限:
grant create seesion to scott;
通常,除了连接数据库外,用户还需要执行其他任务。例如,用户可能需要创建表和其他数据库对象。赋予CREATE TABLE 和 CREATE DATABASE LINK 系统权限:
grant create table ,create database link to scott;
回收权限,可以使用REVOKE命令:
revoke create table from scott;
Oracle 允许DBA将系统权限赋予用户,还允许用户拥有管理权限的能力。使用WITH ADMIN OPTION 子句可以做到这一点:
grant create table to scott with admin option ; --慎用 with admin option
还可以将系统权限赋予public用户组。可以将create session 权限赋予所有需要连接数据库的用户:
grant create session to public ;
所有的用户都会自动获取连接数据库的权限。–慎用
–分配数据库对象权限
拥有数据库对象权限可以访问和操作其他用户的对象。可以赋予的数据库对象权限包括:表,视图,物化视图,序列,软件包,函数,过程用户自定义类型和目录的权限。
要获得这些权限的能力,必须符合下列条件之一:
拥有对象;
已经通过with grant option 子句获得了对象权限;
拥有grant any object privilege 系统权限。
下面的例子将对象权限赋予用户scott;
grant insert,update,delete,select on registrations to scott;
grant all命令的作用为赋予对象insert,update,delete和select权限。下面的语句的作用是上面语句的作用相同:
grant all on registrations to scott;
可以将列级的inser和update权限赋予表。
grant inser(inv_id,inv_name,inv_desc) on inventory to scott;
如果想要使获得了对象权限的用户,能够以级联方式将相同的对象权限赋予其他用户,可以使用WITH GRANT OPTION 子句:
grant insert on registrations to scott with grant option;
也可以将对象那权限赋予pulic组。
grant select on registrations to public;
这样所有的用户都可以选择registrations表。
回收对象权限:
revoke insert,update,delete,select on registrations from scott;
–以集中方式分配权限
角色是一种数据库对象,使用它可以为系统权限和对象权限分组,这样就可以通过一次操作为一个用户赋予多个权限。使用角色可以帮助你管理数据库安全,他们可以
通过集中方式分配权限。可以将角色分配给多个用户,也可以分配给其他角色。
创建一个角色:
create role jr_dba;
将多个系统权限赋予新建的角色:
grant select any table to jr_dba;
grant create any table to jr_dba;
grant create any view to jr_dba;
grant create synonym to jr_dba;;
grant create database link to jr_dba;
将这个角色分给想要赋予这些权限的用户:
grant jr_dba to scott;
grant jr_dba to test;
查看用户获得了哪些角色:
select grantee,granted_role from dba_role_privs order by 1 ;
查看当前数据库的用户拥有哪些角色:
select * from user_role_privs;
回收角色的权限:
revoke create database link from jr_dba;
回收用户的角色
revoke jr_dba to scott;
如果使用PL/SQL,在编译过程函数时会出现一下错误:
ORA-00942:table or view does not exist(表或视图不存在)
但是可以描述表,在sql窗口可以查询表,
原因是没有权限,去表的拥有者赋予相关权限