暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 正确授予权限

原创 小小亮 2022-10-27
2025

授予与撤销

向被授权者授予有效特权很容易,并且可以一遍又一遍地重复,即使特权已被授予。如果您使用了具有有效权限的正确语法,则不会引发错误。

另一方面,撤销用户的有效权限是不同的,而且相当严格,如果该权限从未授予用户,则会失败,系统权限为ORA -01952,对象权限为 ORA-01927 。

实践中的另一个区别是,我们会在用户需要时给予很多,但我们很少会撤销。

在这篇文章中,我们将看到一些正式的授权模式,它们会提醒我们正确有效地执行此操作。

授予系统权限

无论何时创建用户,都可能需要授予系统权限。

1. 授予单一受赠人单一特权

我们授予用户系统权限。这是一对一的类型,最简单的GRANT语法模式。

SQL> grant create procedure to hr;

Grant succeeded.

2. 将单一权限授予多个受赠者

我们授予某些用户系统权限。这是一对多类型。

SQL> grant create procedure to hr, oe, sh;

Grant succeeded.

3. 向单个受赠者授予多个权限

我们授予用户一些系统权限。这是多对一的类型。

SQL> grant create procedure, create table, create view to hr;

Grant succeeded.

4. 向单一受赠者授予混合特权

我们甚至可以在系统权限列表中混合一个角色。

SQL> grant create procedure, create table, create view, connect to hr;

Grant succeeded.

在此示例中,CONNECT是一个角色。

5. 向多个受赠者授予混合特权

我们可以在单个语句中看到多个特权产品多个用户。这是多对多类型。

SQL> grant create procedure, create table, create view, connect to hr, oe, sh;

Grant succeeded.

如果他们是同一类型的用户,那么一次授予权限是非常有效的方法。

授予对象特权

适用于授予系统特权的规则也适用于授予对象特权。但是,我们在GRANT语句中有一个额外的ON对象子句。

SQL> grant select, insert, update, delete on hr.employees to oe, sh, pm;

Grant succeeded.

如果授予者不是对象的所有者,则对象名称应该是完全限定的。

我们可以授予多个对象的对象权限吗?

不,我们不能。目标对象不能成倍增加。让我们看看一个不正确的说法。

SQL> grant select, insert, update, delete on hr.employees, hr.countries to oe, sh, pm;
grant select, insert, update, delete on hr.employees, hr.countries to oe, sh, pm
                                                    *
ERROR at line 1:
ORA-00990: missing or invalid privilege

这里我们在一个语句中授予了两个表,但最终我们看到了ORA-00990,这意味着授予对象权限时不能接受多个对象


原文标题:Grant Privilege Correctly

原文作者:Ed Chen

原文链接:https://logic.edchen.org/grant-privilege-correctly/


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论