Oracle 向角色授予特权

Oracle 向角色授予特权,oracle,oracle11g,grant,Oracle,Oracle11g,Grant,问题是: 创建UnivUser角色,并授予此角色选择、更新、插入、删除和执行pl/sql包和序列的权限。除了这些操作之外,此用户将无法执行任何操作。为了帮助您,您可以在SQLDevelopPP权限对话框中搜索用户 使用以下命令为我执行、选择和删除工作: GRANT select_catalog_role to UnivUser GRANT execute_catalog_role to UnivUser GRANT delete_catalog_role to UnivUser 但是对于插入和

问题是:

创建UnivUser角色,并授予此角色选择、更新、插入、删除和执行pl/sql包和序列的权限。除了这些操作之外,此用户将无法执行任何操作。为了帮助您,您可以在SQLDevelopPP权限对话框中搜索用户

使用以下命令为我执行、选择和删除工作:

GRANT select_catalog_role to UnivUser
GRANT execute_catalog_role to UnivUser
GRANT delete_catalog_role to UnivUser

但是对于插入和更新,它对我不起作用,我不知道如何做,或者我不理解这个问题。

我不知道你是否误解了这个问题,但我知道我不确定你是否写了整个问题

您授予的特权与访问SYS拥有的对象有关,我真的不知道您是否应该这样做

在我看来,您应该坚持对象特权,即将您在自己的对象上指定的内容授予该角色。例如,在my 11g XE数据库中创建:

SQL> grant univuser to mike;

Grant succeeded.
授予Scott创建角色的权限:

SQL> connect sys/pwd@xe as sysdba
Connected.
SQL> grant create role to scott;

Grant succeeded.
创建角色并向其授予某些权限:

SQL> connect scott/tiger
Connected.
SQL> create role univuser identified by univuser;

Role created.

SQL> grant select, update, insert, delete on emp to univuser;

Grant succeeded.

SQL> create or replace procedure p_test is begin null; end;
  2  /

Procedure created.

SQL> grant execute on p_test to univuser;

Grant succeeded.

SQL> create sequence seq_test;

Sequence created.

SQL> grant select on seq_test to univuser;

Grant succeeded.
UNIVUSER拥有的特权列表:

SQL> select table_name, privilege from role_tab_privs where role = 'UNIVUSER';

TABLE_NAME                     PRIVILEGE
------------------------------ ----------------------------------------
EMP                            DELETE
EMP                            INSERT
EMP                            UPDATE
EMP                            SELECT
P_TEST                         EXECUTE
SEQ_TEST                       SELECT

6 rows selected.
现在,将该角色授予数据库中的另一个用户:

SQL> grant univuser to mike;

Grant succeeded.
让我们看看迈克能不能用斯科特的东西做点什么;不要忘记设置角色:

看起来还可以

[编辑:编写编写SQL的SQL]


如果它对我不起作用,您的意思是您尝试将insert授予univuser,但出现错误ORA-01924:角色“insert”未授予或不存在,那么这可能是因为您必须在某个表上授予insert。但是你忘了提到你尝试了什么或者遇到了什么问题,所以这只是一个猜测。我想授予用户在所有表上插入的权限,而不是在特定表上插入的权限。我不知道这是否是他在问题中提出的问题。没有通用的插入、更新或删除等权限。任何用户都可以使用自己的表自动执行所有这些操作。也许这个问题涉及到一些SQL开发人员的功能,但我对它不太熟悉。不,我认为他们不能自动修改表,我们需要授予他们权限。。即使是与grant connect to user_name的连接也非常感谢。您可能不这么认为,但仍然不需要任何额外的权限来插入到您拥有的表中。谢谢,这非常有用,但我需要创建一个名为temp的表?我想给所有的桌子这个特权,可以吗?不客气。否-不要创建任何其他表。我的示例使用了属于Scott模式的EMP表——您可以对自己的表授予特权。不幸的是,没有一个命令可以实现这一点,因此您必须分别向每个表授予权限。为了避免手动执行此操作,请编写为您创建SQL的SQL。我编辑了我的答案,看一看。我使用命令ALTER USER_name QUOTA 100M ON USERS,它允许我在表中插入。
SQL> select 'grant select, insert, update, delete on ' || table_name || ' to univuser;'
  2  from user_tables;

'GRANTSELECT,INSERT,UPDATE,DELETEON'||TABLE_NAME||'TOunivuser;'
-------------------------------------------------------------------------------
grant select, insert, update, delete on EMP to univuser;
grant select, insert, update, delete on BONUS to univuser;
grant select, insert, update, delete on SALGRADE to univuser;
grant select, insert, update, delete on DEPT to univuser;

SQL>

SQL> select 'grant execute on ' || object_name || ' to univuser;'
  2  from user_objects
  3  where object_type in ('PROCEDURE', 'FUNCTION', 'SEQUENCE');

'GRANTEXECUTEON'||OBJECT_NAME||'TOUNIVUSER;'
--------------------------------------------------------------------------------
grant execute on EMPTY_TABLE to univuser;
grant execute on SIEROT to univuser;
grant execute on P_RC to univuser;
grant execute on F_RC to univuser;
grant execute on MYFUNCTION to univuser;
grant execute on F_RET to univuser;
grant execute on F_REGNUM to univuser;
grant execute on F_COUNT_OF_SUNDAYS to univuser;
grant execute on P_TEST to univuser;
grant execute on F_TEST to univuser;
grant execute on MTJ_ID_SEQ to univuser;