0

我使用 System 用户使用以下语句创建了两个用户。我希望 ADMIN_USER 拥有所有权限,并且该用户将创建一组表。我有一个外部进程正在为 ADMIN_USER 创建的两个表输入数据。我的问题是,如果 ADMIN_USER 创建了所有表结构,我如何赋予 EXTERNAL_USER 读取、更新和插入 TABLE_A 和 TABLE_B 的能力?当我以 ADMIN_USER 或 SYSTEM 用户身份登录时,我会运行授权语句吗?我正在使用 Oracle 11g。

以系统用户身份登录时创建:

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;
4

1 回答 1

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 还应该能够授予对象级权限。通常最好使用对象所有者帐户。

于 2013-11-01T04:16:25.910 回答