Как отозвать разрешение на изменение таблицы у пользователя в oracle?

#oracle

Вопрос:

У меня есть пользователь, у которого есть разрешение только на создание ссылок, создание сеанса и управление планировщиком, я хочу, чтобы он не мог создавать какие-либо объекты, удалять их или изменять их … Мне уже удалось предотвратить удаление или создание новых вещей, но я не могу удалить разрешение на внесение изменений.

попробуйте выполнить следующую команду с другим пользователем, имеющим привилегии SYSDBA:

ОТМЕНИТЬ ИЗМЕНЕНИЕ В USER.TEST_LUIS ОТ ПОЛЬЗОВАТЕЛЯ;

Но ответ говорит мне, что я не могу удалить разрешения, которые не были предоставлены.

Есть какие-нибудь идеи?

Спасибо!

Комментарии:

1. Вы проверили, действительно ли этот пользователь может изменять? В сообщении об ошибке говорится, что в настоящее время у них нет такого разрешения.

2. О да, у него есть привилегия SYSDBA, я думаю, проблема в том, что я не могу отозвать разрешение у пользователя над его собственными объектами

3. Да, SYSDBA всегда предоставит им права администратора, если вы хотите отменить ALTER, вам нужно будет удалить их из SYSDBA.

Ответ №1:

Вы не можете отозвать права на изменение объектов у пользователя, которому они принадлежат. Вам нужно будет удалить привилегию, чтобы создать их в первую очередь.

Пример

 sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 28 16:14:30 2021
Version 19.6.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.6.0.0.0

SQL> drop user test2 cascade ;

User dropped.

SQL> create user test2 identified by Oracle_1234 default tablespace users temporary tablespace temp_group account unlock profile default quota unlimited on users ;

User created.

SQL> grant create session , create table to test2 ;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.6.0.0.0

sqlplus test2/Oracle_1234

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 28 16:13:24 2021
Version 19.6.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.6.0.0.0

SQL> create table t1 ( c1 number ) ;

Table created.

SQL> alter table t1 add ( c2 number ) ;

Table altered.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.6.0.0.0

sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 28 16:14:30 2021
Version 19.6.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.6.0.0.0

SQL> revoke alter on test2.t1 from test2 ;
revoke alter on test2.t1 from test2
*
ERROR at line 1:
ORA-01927: cannot REVOKE privileges you did not grant
 

В приведенном ниже примере я не могу отозвать привилегию, потому что пользователь является владельцем таблицы.

Однако я могу отозвать create table эту привилегию

 SQL> revoke create table from test2 ;

Revoke succeeded.
 

Изменение объектов, которыми вы владеете, наследуется привилегией создания того же типа объектов.

Комментарии:

1. Спасибо! вместо этого я создам другого пользователя. 😀