Sql 撤消Oracle中表的权限
我正在尝试使用查询来撤销Employee表的Sql 撤消Oracle中表的权限,sql,oracle,oracle10g,privileges,Sql,Oracle,Oracle10g,Privileges,我正在尝试使用查询来撤销Employee表的SELECT权限 REVOKE SELECT ON ODS_INSTALL.employee FROM ODS_INSTALL 目前,我以系统用户的身份连接,但在连接到ODS\u安装并以以下方式启动查询后: 从员工中选择* 我正在获取输出,但它应该给出一个关于权限不足的错误。 可能是什么问题?在Oracle中,模式是用户,据我所知,您不能从表的所有者那里获得表的特权 奇怪的是,您没有出现错误,就像在我的测试系统(Oracle 11g)上一样: (在之前
SELECT
权限
REVOKE SELECT ON ODS_INSTALL.employee FROM ODS_INSTALL代码>
目前,我以系统
用户的身份连接,但在连接到ODS\u安装
并以以下方式启动查询后:
从员工中选择*
我正在获取输出,但它应该给出一个关于权限不足的错误。
可能是什么问题?在Oracle中,模式是用户,据我所知,您不能从表的所有者那里获得表的特权
奇怪的是,您没有出现错误,就像在我的测试系统(Oracle 11g)上一样:
(在之前签发GRANT
不会改变任何事情)
基本上,对象权限设计用于授予/撤销其他用户对对象的访问权限。也许您应该将表移动到一个专用模式,并在该模式中为ODS\u INSTALL
授予insert/update/delete权限
如果您真的需要限制用户访问自己的表,那么我能看到的唯一方法就是使用。从广义上讲,您会发现Oracle将自动附加到每个用户查询中
CREATE OR REPLACE FUNCTION auth_orders(
schema_var IN VARCHAR2,
table_var IN VARCHAR2
)
RETURN VARCHAR2
IS
return_val VARCHAR2 (400);
BEGIN
RETURN '1=0'; -- always false: "hide" all rows
END auth_orders;
/
并使用以下方式安装:
BEGIN
DBMS_RLS.ADD_POLICY (
object_schema => 'ODS_INSTALL',
object_name => 'employee',
policy_name => 'orders_policy',
function_schema => 'sys',
policy_function => 'auth_orders',
statement_types => 'select'
);
END;
查看一些详细信息。哪个架构包含您的员工表?按照查询的外观,两种模式中可能都有一个查询。当然,您不能从表的所有者那里取消对表的特权。@FrankSchmitt EMPLOYEE表在ODS_安装模式下,我要触发的实际查询是在ODS_安装上取消选择。ODS_安装中的EMPLOYEE代码>超级用户不能从表中“撤销”权限吗?表的所有者始终对其拥有完全授权,并且不能撤销这些权限。如果您不想在表上拥有权限,则必须将其移动到另一个架构。如果我们在此之前触发GRANT
查询,该怎么办revoking@Abhishek不更改任何内容:grant select on sylvain.n to sylvain
=>grant successed<代码>撤销在sylvain.n上选择sylvain代码>=>ORA-01927:无法撤销您在我启动时未授予的特权(在Oracle 10g上)GRANT
query,然后REVOKE
我获得了REVOKE successed
,但只要我更改用户以查看权限是否被撤销,我仍然能够访问员工
表的数据,我正在使用其他用户撤销权限。在我的场景(作为系统)中,我在ODS\u安装上启动GRANT
,然后启动REVOKE
user@Abhishek我不能告诉你更多,因为我手头没有甲骨文10。但我怀疑这会起作用。也许Oracle Corp.只修复了11g上的授予/撤销行为,以便正确报告故障?我只能鼓励你等几个小时,也许有人会给你一个更好的答案。。。
CREATE OR REPLACE FUNCTION auth_orders(
schema_var IN VARCHAR2,
table_var IN VARCHAR2
)
RETURN VARCHAR2
IS
return_val VARCHAR2 (400);
BEGIN
RETURN '1=0'; -- always false: "hide" all rows
END auth_orders;
/
BEGIN
DBMS_RLS.ADD_POLICY (
object_schema => 'ODS_INSTALL',
object_name => 'employee',
policy_name => 'orders_policy',
function_schema => 'sys',
policy_function => 'auth_orders',
statement_types => 'select'
);
END;