创建共享表的权限

时间:2013-11-01 03:59:53

标签: oracle

我使用系统用户使用以下语句创建了两个用户。我希望ADMIN_USER具有所有权限,此用户将创建一组表。我有一个外部进程,它为ADMIN_USER创建的两个表提供数据。我的问题是如果ADMIN_USER创建了所有表结构,我如何给EXTERNAL_USER提供读取,更新和插入TABLE_A和TABLE_B的能力?当我以ADMIN_USER或SYSTEM用户身份登录时,我会运行grant语句吗?我使用的是Oracle 11g。

以SYSTEM用户身份登录时创建:

create user "ADMIN_USER" identified by "p@ssword123";      
grant create session, grant any privilege to ADMIN_USER;

create user "EXTERNAL_USER" identified by "p@ssword321";

以ADMIN_USER身份登录:

GRANT create session, select, update, insert 
   ON TABLE_A
   TO EXTERNAL_USER;
GRANT create session, select, update, insert 
   ON TABLE_B
   TO EXTERNAL_USER;

1 个答案:

答案 0 :(得分:2)

首先,您非常不希望授予ADMIN_USER GRANT ANY PRIVILEGE权限。用户不需要任何权限即可授予用户拥有的表的对象级权限。 ANY权限非常强大。可以向其他用户授予任何权限的用户可以使任何用户(包括用户自己)成为DBA。那不是你想要的。

实际上,作为SYSTEM,您希望授予您希望用户拥有的系统权限。作为对象所有者,您将授予对象级权限。

作为SYSTEM

CREATE USER admin_user 
  IDENTIFIED BY "p@ssword123"
  DEFAULT TABLESPACE tablespace_name
  QUOTA 10M ON tablespace_name;
CREATE USER external_user IDENTIFIED BY "p@ssword321";

GRANT CREATE SESSION, CREATE TABLE TO admin_user;
GRANT CREATE SESSION TO external_user;

作为ADMIN_USER

<<create the tables>>

GRANT select, insert, update
   ON table_a
   TO external_user;
GRANT select, insert, update
   ON table_b
   TO external_user;

DBA还应该能够授予对象级权限。通常最好使用对象所有者帐户。