我有两个Schema Schema-1和Schema-2。我想创建一个可以同时访问Schema(Schema-1和Schema-2)的超级用户。
我想用oracle 11g中的命令创建一个用户。有可能吗?
发布于 2020-03-14 16:51:36
这样的用户已经存在;它被称为SYS,他拥有数据库。然而,在日常工作中使用它并不是一个很好的主意-你更愿意(正如你所希望的)创建自己的“超级用户”,他能够做这样的事情。例如:
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> create user superuser identified by superman;
User created.
SQL> grant dba to superuser;
Grant succeeded.好的,让我们试一下:
SQL> connect superuser/superman
Connected.
SQL> select count(*) From scott.emp;
COUNT(*)
----------
14
SQL> select table_name from dba_tables where owner = 'MIKE';
TABLE_NAME
------------------------------
EMP
DEPT
BONUS
SALGRADE
DUMMY
ABC
6 rows selected.
SQL> select * from mike.abc;
KEY ID SEQ THINGS DESCR
---------- ---------- ---------- ---------- ----------
1 1 0 Food Chicken
2 1 1 Cars BMW
3 1 2 Sport Soccer
4 2 0 Food Mutton
5 2 1 Cars Ford
6 2 2 Sport Tennis
6 rows selected.
SQL>现在,DBA是否适合该用户,我不知道。也许不是,所以您可能更愿意只授予所需的特权集。是哪一套,我也分不清。
例如,对于schema1和schema2用户的表,将select权限授予superuser就足够了。但是,您不能在一个命令中做到这一点--您必须为每个用户和他们的每个表分别执行此操作(这意味着有很多grant select语句)。让我们试一下:
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> revoke dba from superuser;
Revoke succeeded.
SQL>这是一项逐条语句编写语句的无聊工作,因此我将编写代码来为自己编写代码:
SQL> select 'grant select on ' || owner ||'.' ||table_name || ' to superuser;' str
2 from dba_tables
3 where owner in ('SCOTT', 'MIKE')
4 order by owner, table_name;
STR
--------------------------------------------------------------------------------
grant select on MIKE.ABC to superuser;
grant select on MIKE.BONUS to superuser;
grant select on MIKE.DEPT to superuser;
<snip>
grant select on SCOTT.TEST_B to superuser;
grant select on SCOTT.TEST_D to superuser;
26 rows selected.
SQL>好的,现在复制/粘贴上面的grant语句并运行它们。
SQL> grant select on MIKE.ABC to superuser;
Grant succeeded.
SQL> grant select on MIKE.BONUS to superuser;
Grant succeeded.
SQL> grant select on MIKE.DEPT to superuser;
Grant succeeded.
<snip>
SQL> grant select on SCOTT.TEST_B to superuser;
Grant succeeded.
SQL> grant select on SCOTT.TEST_D to superuser;
Grant succeeded.
SQL>它起作用了吗?
SQL> connect superuser/superman
ERROR:
ORA-01045: user SUPERUSER lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
SQL>啊哈!还不是时候!撤销DBA撤销了大量特权,因此superuser现在以用户身份存在,但不能做任何事情。所以,让我们让它连接到数据库:
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> grant create session to superuser;
Grant succeeded.
SQL> connect superuser/superman
Connected.
SQL> select * From scott.dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * From mike.abc;
KEY ID SEQ THINGS DESCR
---------- ---------- ---------- ---------- ----------
1 1 0 Food Chicken
2 1 1 Cars BMW
3 1 2 Sport Soccer
4 2 0 Food Mutton
5 2 1 Cars Ford
6 2 2 Sport Tennis
6 rows selected.
SQL>对,好多了。这就是我所说的“只授予所需的特权集”的意思;不要授予超过某人真正需要的特权。
https://stackoverflow.com/questions/60679803
复制相似问题