没有权限的用户可以在 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 谈谈,看看到底发生了什么。
我正在尝试做一个测试来证明用户的权限。我有一个用户只有一个权限(执行程序)但是当我尝试这个时,这个用户可以改变 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 谈谈,看看到底发生了什么。