oracle 12c r2向用户授予选择权限

时间:2018-10-23 15:35:57

标签: database oracle ubuntu

我正在尝试授予“读取”用户的选择权限,但是当我与该用户一起输入时,我什么也做不了。 它给了我以下失败:

SQL> desc table
ERROR:
ORA-04043: object enfermeria does not exist

要授予我执行此操作的权限:

CREATE USER books_admin IDENTIFIED BY MyPassword;

GRANT CONNECT TO books_admin;
GRANT CONNECT, RESOURCE, DBA TO books_admin;
GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
GRANT UNLIMITED TABLESPACE TO books_admin;
GRANT
  SELECT,
ON
  schema.books
TO
  books_admin;

2 个答案:

答案 0 :(得分:0)

以“ books_admin”用户的身份尝试:

desc schema.books

如果可行,请尝试:

create [public] synonym books on schema.books;
desc books;

希望有帮助。

答案 1 :(得分:0)

男孩,您向该用户授予了很多东西,绝大多数特权是不必要的,其中有些特权甚至是危险(您不应该真正授予这样的DBA)。另外,您应该尝试发布您的实际工作,而不是发布弥补的内容(您试图描述 table ,而Oracle回应了 enfermeria >不存在)?

这是您可能会接受的建议。

我将以特权用户身份连接到我的XE数据库(在本例中为SYS;如果您要用于管理目的还有另一个,请使用它)以创建读取用户

C:\>sqlplus sys@xe as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Uto Lis 23 21:32:36 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> create user read_user identified by ru
  2  default tablespace users
  3  temporary tablespace temp
  4  quota unlimited on users;

User created.

SQL> grant create session to read_user;

Grant succeeded.

注意我授予read_user的内容:仅创建会话。到目前为止,这是它唯一需要的特权。如果事实证明它还需要其他东西,请授予它,但不要授予诸如 connect,resource,dba 之类的角色-不再以这种方式

现在,以拥有表的用户身份进行连接,我想让read_user从中进行选择。

SQL> connect scott/tiger@xe
Connected.
SQL> grant select on dept to read_user;

Grant succeeded.

最后,以read_user身份连接并查看其内容:

SQL> connect read_user/ru@xe
Connected.
SQL> desc dept
ERROR:
ORA-04043: object dept does not exist

啊!同样的错误!这是因为read_user没有可用的DEPT表-它在他的模式中不存在,没有公共同义词,因此-他应该在表名之前加上表的所有者名(即Scott):

SQL> desc scott.dept
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                    NOT NULL NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

SQL> select * from scott.dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>

好多了,你不觉得吗?

为了不指定所有者名称,请创建该表的同义词(仍以read_user身份连接):

SQL> create synonym dept for scott.dept;
create synonym dept for scott.dept
*
ERROR at line 1:
ORA-01031: insufficient privileges

糟糕!做不到,我没有那个特权。因此-返回SYS,为read_user授予特权,以便他可以创建同义词,然后再次返回read_user并重复以下语句:

SQL> connect sys@xe as sysdba
Enter password:
Connected.
SQL> grant create synonym to read_user;

Grant succeeded.

SQL> connect read_user/ru@xe
Connected.
SQL> create synonym dept for scott.dept;

Synonym created.

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>

我建议您阅读我写的内容并将其应用于您的情况。希望您会成功。祝你好运!