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

oracle 权限的一般说明2

原创 不吃草的牛_Nick 2023-06-18
558

2.对象权限
对象权限是各种类型的数据库对象上的权限,它允许用户在指定的表、视图、实体化视图、序列、过程、函数或程序包上执行操作。因此,数据库的所有用户即使不需要任何系统权限,也必须有对象权限。有的对象权限可用于所有数据库对象,而有的对象权限仅用于某些对象。

在授予对象权限时,可使用下面的SQL语句:
ALTER
SELECT
DELETE
EXECUTE
INSERT
REFERENCES
INDEX

不同类型的对象权限、每种类型的主要对象权限及每种对象类型的一个例子。
表权限:SELECT、ALTER、DELETE、INSERT和UPDATE;
GRANT DELETE ON bonuses TO hr;

提示 可在列级授予INSERT和UPDATE权限.下例说明怎样授予persons表中salary列上的INSERT 权限:
GRANT INSERT (salary) ON persons to salapati;

为了授予行级权限,可使用Oracle的虚拟专用数据库或Oracle Label Security 特性.

视图权限:SELECT, DELETE, INSERT和UPDATE;
GRANT SELECT, UPDATE ON emp_view TO PUBLIC;

序列权限:ALTER和SELECT;
GRANT SELECT ON oe.customers_seq TO hr;

过程、函数和程序包权限:EXECUTE和DEBUG;
GRANT EXECUTE ON employee_pkg TO hr;

实体化视图权限:SELECT和QUERY REWRITE;
GRANT QUERY REWRITE TO hr;

字典权限:READ和WRITE;
GRANT READ ON DIRECTORY bfile_dir TO hr;

如果授予用户某个带有另外的GRANT OPTION子句的对象权限,则该用户可以把此权限授予数据库中其他用户。下面是一个例子:
GRANT DELETE ON bonuses TO hr WITH GRANT OPTION;

以前面的方式授予hr用户bonuses表上的DELETE权限后,hr可以把此权限授予其他用户。

任意对象的拥有者具有该对象上的所有权限,并旦可以把该对象上的权限授予其他用户。模式的拥有者(不一定是DBA、SYSTEM或SYS用户)有权授这些权限.假如以下某个条件成立,你可以将对象权限授予其他用户:
(1) 你是对象的拥有者:
(2) 对象的拥有者给你带有GRANT OPTION的对象权限;
(3) 你被授予了 GRANT ANY OBIECT系统权限。

注解 不能授予某些模式对象上的对象权限,如群、索引和数据库链接。这些类型的对象的使用是用系统权限控制的。例如,为了更改一个群(cluster),用户必须拥有该群或具有ALTER ANY CLUSTER系统权限。

对象拥有者可在GRANT语句中添加ALL子句,以授予对象上的所有可能的权限。例如,下面两条GRANT语句是等同的:
GRANT SELECT,INSERT,UPDATE,DELETE on EMPLOYEES TO oe;
grant all on employees to oe;

模式拥有者一次可授予任意给定对象上的一种类型或全部类型的权限。下面给出几个说明授予对象权限的例子:
GRANT SELECT ON ods_process TO tester;
GRANT INSERT ON ods_process TO tester;
GRANT ALL ON ods_servers TO tester;
GRANT INSERT ANY TABLE TO tester;
grant insert any table to tester


  • ERROR at line 1:
    0RA-O1O31: insufficient privileges

ODS用户能够用GRANT ALL命令将ods_servers表上的所有权限(SELECT, INSERT、UPDATE和DELETE)授予用户tester。但ODS不能成功授予tester INSERT ANY TABLE权限,因为这需要其不具有的系统权限(INSERTANYTABLE)。请注意,System用户可成功地进行这个授权,如下所示:
SQL> CONNECT system/manager@financel
SQL> SHOW USER
USER is "SYSTEM"
SOL> GRANT INSERT ANY TABLE TO tester;

如果对象拥有者授予某个用户带WITH GRANT子句的一个对象权限,则此权限的被授予者能够将此权限授予其他用户。如下所示:
GRANT INSERT ANY TABLE TO tester WITH GRANT OPTION;

3.列级对象权限
在上面的讨论中,对象权限总是隐含在整个表上执行DML活动的权利。不过,用户也可以被授予表的某些列上的权限,如下所示:
GRANT UPDATE (product_id) ON sales01 TO salapati;

4.撤销对象权限
撤销对象权限类于授予权限。对于想撤销的每个对象权限,可简单地发布REVOKE语句:
CONNECT ods/ods@financel;
REVOKE SELECT, INSERT ON ods_process FROM tester;

注意,不能在列级撤销权限,即使该权限是在列级授予的。为撤销一个权限,必须使用表级撤销,不管它是在什么级别授予的,如下所示:
SQL> REVOKE UPDATE (hostname) ON ods_process FROM tester;
revoke update(hostname) on ods_process from tester


  • ERROR at line 1:
    ORA-01750: UPDATE/REFERENCES may only be revoked from the whOLe table, not by column

SQL> REVOKE UPDATE ON ods process FROM tester;

•GRANT ANY OBJECT权限
具有GRANT ANY OBJECT系统权限的用户能够授予和撤销任何对象权限,就像他是实际对象的拥有者一样。在作为SYSDBA(用户SYS)连接时,你被自动授予这个权限,并且带有WITH ADMIN OPTION 子句。

5.调用者权限和定义者权限
在Oracle中创建存储过程需要创建者的权限。这是默认的行为,我们说此存储过程是用定义者权限创建的。用户执行此过程需要创建者(定义者)而不是用户的对象权限。但是,可能在某些情形下我们不希望所有用户都能以相同的权限执行此过程。可以通过用调用者权限来创建过程,定制其可访问性。这表示该过程以用户而不是创建者的权限执行。

在以调用者的权限创建过程时,该过程将在用户而不是拥有者的安全环境下执行。因此,任何打算从不同的模式执行过程的用户,都需要具有该过程所涉及的所有表上的对象权限。这些表上的所有DML权限都应该直接而不是通过角色授予该用户。

GREATEPROCEDURE语句中的AUTHID子句指出这个过程是以用戸或调用者的权限创建,而不是以默认拥有者或定义者的权限创建。下面是一个例子:
CREATE OR REPLACE PROCEDURE delete_emp
(p_emp_id number)
AUTHID current_user IS
BEGIN
DELETE FROM emp WHERE emp_id = p_emp_id;
COMMIT;
END;
/

在第3行中,AUTHID子句指出此过程将以current_user (过程的调用者)的权限执行。显然,要成功执行此过程,用户必须在表emp上具有明确的对象权限DELETE.

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

评论