我只需要在同一个数据库下创建从用户到任何用户的表。让我们考虑 3 个模式。
Schema_1、Schema_2 和 Schema_3。
模式 1 具有 DBA 特权。
是否可以从 Schema_1 中的 Schema_2 或 Schema_3 中表??
或者我们也需要给这个角色“创建任何表”??
我只需要在同一个数据库下创建从用户到任何用户的表。让我们考虑 3 个模式。
Schema_1、Schema_2 和 Schema_3。
模式 1 具有 DBA 特权。
是否可以从 Schema_1 中的 Schema_2 或 Schema_3 中表??
或者我们也需要给这个角色“创建任何表”??
DBA 角色在典型安装中应具有此权限 - 您可以通过以下方式查看具有此权限的其他角色/用户:
从 dba_sys_privs 中选择受让人,其中 privilege = 'CREATE ANY TABLE'
正如@dpbradly 所说,Oracle 对 DBA 角色的“开箱即用”权限包括“CREATE ANY TABLE”权限。您可以使用以下查询检查这一点(并查看授予此角色的所有系统权限):
SELECT * FROM role_sys_privs WHERE role = 'DBA' ORDER BY PRIVILEGE;
Oracle 数据字典是您的朋友。
好的,让我们把一些事情弄清楚
CREATE ANY TABLE
是系统特权而不是角色您可以通过简单地编写来授予任何用户 DBA 特权GRANT DBA TO <USER_NAME> WITH ADMIN OPTION;
话虽这么说,schema_1
将能够在任何用户上创建表,因为他有CREATE ANY TABLE
特权
create table hr.dbaMade_tab
(id number,
name varchar2(20)
);
如果您 schema_1 授予CREATE ANY TABLE
,则 schema_2 和 schema_3 将能够为任何表创建表。不要将 DBA 角色授予任何人。创建新角色并为其赋予必要的权限并将该角色授予其他用户。在您的情况下,schema_2 和 schema_3。希望有帮助。