Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 撤消Oracle中表的权限_Sql_Oracle_Oracle10g_Privileges - Fatal编程技术网

Sql 撤消Oracle中表的权限

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)上一样: (在之前

我正在尝试使用查询来撤销Employee表的
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;