【问题标题】:User with no privileges can alter table in oracle没有权限的用户可以更改 oracle 中的表
【发布时间】:2020-10-24 18:38:23
【问题描述】:

我正在尝试进行测试以证明用户的权限。我有一个用户只有一个权限(执行程序)但是当我尝试这个时,这个用户可以改变表:

SHOW USER;
CONNECT USER1/USER1;
CREATE TABLE TEST_TABLE (colum int); //Insufficient privileges
SHOW USER;
ALTER TABLE TABLE_TESTING ADD TESTING varchar(255);

所以,我在 create table 上获得的权限不足,但是当我执行 ALTER TABLE 时,用户可以这样做,我不知道为什么,因为我只选择了执行程序的权限

【问题讨论】:

  • 要么有表 TABLE_TESTING 的同义词,要么 USER1 是该表的所有者,并且作为所有者,他可以更改...
  • 通常您会在生产数据库中通过不提供密码或从USER1 撤销create session 权限来解决此问题。

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

这就是我的看法:按照示例进行。

作为特权用户(我的 XE 数据库中的SYS),我将创建用户并仅授予两个特权:create session(以便用户可以连接到数据库)和create table(以便它可以创建表):

SQL> show user
USER is "SYS"
SQL>
SQL> create user timer identified by timer
  2  default tablespace users
  3  temporary tablespace temp
  4  quota unlimited on users;

User created.

SQL> grant create session, create table to timer;

Grant succeeded.

以新创建的用户身份连接并创建一个简单的表:

SQL> connect timer/timer
Connected.
SQL> create table test (id number);

Table created.

返回SYS:这一次,撤销create table 特权:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> revoke create table from timer;

Revoke succeeded.

返回timer:创建表不会成功(因为我不再拥有该特权):

SQL> connect timer/timer
Connected.
SQL> create table test_table (colum int);
create table test_table (colum int)
*
ERROR at line 1:
ORA-01031: insufficient privileges

但是,我仍然可以alter 以前创建的表。为什么?因为我拥有它们,我可以用它们为所欲为:

SQL> alter table test add testing varchar2(20);

Table altered.

我建议你和你的 DBA 谈谈,看看到底发生了什么。

【讨论】:

  • 那么,有没有办法阻止用户修改自己的表?
【解决方案2】:

这可能是因为用户有权执行,这意味着他可以通过执行代码来更改表,但不允许他显式地创建新表。见:https://docs.oracle.com/cd/B19306_01/network.102/b14266/authoriz.htm#DBSEG5000

【讨论】:

  • 那么,我怎样才能授予执行权限并且不允许用户更改表?
  • 例如允许他只执行预定义的过程,不改变表。正如 Turo 在他的评论中提到的那样,您正在更改的表很可能归用户所有,这就是他可以更改它的原因。
  • 不要在 USER1 架构中创建表,也不要显式授予 USER1 权限以更改另一个架构中的表。
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 2012-06-05
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多