没有权限的用户可以在 oracle 中更改 table

User with no privileges can alter table in oracle

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

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

所以,我在创建 table 时获得的权限不足,但是当我执行 ALTER TABLE 时,用户可以执行此操作,我不知道为什么,因为我只 select执行程序的权限

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

我是这样看的:按照这个例子。

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

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.

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

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:创建 table 不会成功(因为我不再拥有该特权):

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 以前创建的 tables。为什么?因为我拥有他们,我可以用他们为所欲为:

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

Table altered.

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