最小权限原则
有时,用户有很多不必要的权限,这是因为某些特权用户不小心将几乎所有权限授予了不应该拥有这些权限的普通用户。为了执行最小权限原则,应该尽快删除它们。
在这篇文章中,将讨论如何删除用户的几种权限。
- 撤销用户的所有系统特权
- 撤销用户的所有对象权限
- 撤销用户的所有角色
A撤销用户的所有系统特权
例如用户被授予了太多不必要的系统权限。
SQL> select count(*) cnt from dba_sys_privs where grantee = 'HR';
CNT
----------
234
几乎所有的系统权限都已授予用户
以下是删除用户所有系统权限的步骤:
1撤销语句
我们可以从DBA_SYS_PRIVS中检索一些信息来编写撤销语句。
SQL> column stmt format a100;
SQL> set heading off;
SQL> select 'revoke ' || privilege || ' from ' || grantee || ';' stmt from dba_sys_privs where grantee = 'HR' order by 1;
revoke ADMINISTER ANY SQL TUNING SET from HR;
revoke ADMINISTER DATABASE TRIGGER from HR;
revoke ADMINISTER RESOURCE MANAGER from HR;
...
234 rows selected.
2撤销用户的所有系统权限
有 2 个选项来删除用户的系统权限。
一项一项执行
将上面生成的语句一一执行。更好的方法是复制所有语句并将它们粘贴到 SQL 提示符,它会立即执行所有语句。
SQL> revoke ADMINISTER ANY SQL TUNING SET from HR;
Revoke succeeded.
SQL> revoke ADMINISTER DATABASE TRIGGER from HR;
Revoke succeeded.
SQL> revoke ADMINISTER RESOURCE MANAGER from HR;
Revoke succeeded.
...
所有特权
由于我们可能不知道涉及到多少系统权限,所以我们可以将完整的系统权限提供给用户,然后全部收回。
SQL> grant all privileges to hr;
Grant succeeded.
SQL> revoke all privileges from hr;
Revoke succeeded.`
我们用两个命令清除了所有系统权限。
3将必要的权限授予用户
SQL> grant create session, create table, create view, create procedure, create type to hr;
Grant succeeded.`
B撤销用户的所有对象权限
既然我们已经知道了最小权限原则,那么我们应该额外关注对象权限。
以下是删除用户所有系统权限的步骤:
1撤销语句
SQL> select 'revoke all on ' || owner || '.' || table_name || ' from ' || grantee || ' cascade constraints;' stmt from dba_tab_privs where grantee = 'OE' order by 1;
revoke all on HR.EMPLOYEES from OE cascade constraints;
revoke all on HR.EMPLOYEES from OE cascade constraints;
revoke all on HR.LOCATIONS from OE cascade constraints;
revoke all on HR.LOCATIONS from OE cascade constraints;
revoke all on SYS.DBMS_STATS from OE cascade constraints;
revoke all on SYS.SS_OE_XMLDIR from OE cascade constraints;
revoke all on SYS.SS_OE_XMLDIR from OE cascade constraints;
7 rows selected.
请注意,关键字ALL表示特定于对象的所有可能权限。在对象权限中,ALL和ALL PRIVILEGES是同义词,也就是说在对象上使用ALL或ALL PRIVILEGES没有区别。
其次,并不是所有的语句你都想用。您可以选择其中的一些来执行。
2撤销用户对对象的所有操作
然后有选择地执行语句。这里选择其中的4个来执行。
SQL> revoke all on HR.EMPLOYEES from OE cascade constraints;
Revoke succeeded.
SQL> revoke all on HR.EMPLOYEES from OE cascade constraints;
Revoke succeeded.
SQL> revoke all on HR.LOCATIONS from OE cascade constraints;
Revoke succeeded.
SQL> revoke all on HR.LOCATIONS from OE cascade constraints;
Revoke succeeded.
C撤销用户的所有角色
角色是一组系统和对象权限,可以很容易地授予用户或从用户那里撤消。
以下是从用户中删除所有角色的步骤:
1撤销语句
SQL> select 'revoke ' || granted_role || ' from ' || grantee || ';' stmt from dba_role_privs where grantee = 'IX' order by 1;
revoke AQ_ADMINISTRATOR_ROLE from IX;
revoke AQ_USER_ROLE from IX;
revoke CONNECT from IX;
revoke RESOURCE from IX;
revoke SELECT_CATALOG_ROLE from IX;`
请注意,并不是所有的语句你都想使用。您可以选择其中的一些来执行。
2撤销用户的所有角色
接下来有选择地执行语句
SQL> revoke AQ_ADMINISTRATOR_ROLE from IX;
Revoke succeeded.
SQL> revoke AQ_USER_ROLE from IX;
Revoke succeeded.
SQL> revoke SELECT_CATALOG_ROLE from IX;
Revoke succeeded.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




