首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在oracle 11G中创建可访问多个架构的超级用户

在oracle 11G中创建可访问多个架构的超级用户
EN

Stack Overflow用户
提问于 2020-03-14 12:43:07
回答 1查看 181关注 0票数 0

我有两个Schema Schema-1和Schema-2。我想创建一个可以同时访问Schema(Schema-1和Schema-2)的超级用户。

我想用oracle 11g中的命令创建一个用户。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-14 16:51:36

这样的用户已经存在;它被称为SYS,他拥有数据库。然而,在日常工作中使用它并不是一个很好的主意-你更愿意(正如你所希望的)创建自己的“超级用户”,他能够做这样的事情。例如:

代码语言:javascript
复制
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> create user superuser identified by superman;

User created.

SQL> grant dba to superuser;

Grant succeeded.

好的,让我们试一下:

代码语言:javascript
复制
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是否适合该用户,我不知道。也许不是,所以您可能更愿意只授予所需的特权集。是哪一套,我也分不清。

例如,对于schema1schema2用户的表,将select权限授予superuser就足够了。但是,您不能在一个命令中做到这一点--您必须为每个用户和他们的每个表分别执行此操作(这意味着有很多grant select语句)。让我们试一下:

代码语言:javascript
复制
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> revoke dba from superuser;

Revoke succeeded.

SQL>

这是一项逐条语句编写语句的无聊工作,因此我将编写代码来为自己编写代码:

代码语言:javascript
复制
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语句并运行它们。

代码语言:javascript
复制
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>

它起作用了吗?

代码语言:javascript
复制
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现在以用户身份存在,但不能做任何事情。所以,让我们让它连接到数据库:

代码语言:javascript
复制
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>

对,好多了。这就是我所说的“只授予所需的特权集”的意思;不要授予超过某人真正需要的特权。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60679803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档