Oracle 12c R2 向用户授予选择权限



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

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;

男孩,你授予了该用户很多东西,绝大多数权限都是不必要的,其中一些甚至是危险的(你不应该真的像那样授予DBA(。另外,你应该尝试发布你真正做了什么,而不是编造东西(你试图描述表格,而 Oracle 回应说enfermeria不存在(?

这里有一个你可能会接受,也可能不接受的建议。

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

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的内容:仅创建会话。到目前为止,这是它唯一需要的特权。如果事实证明它需要其他东西,请授予它,但不要授予连接、资源、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>

我建议你阅读我写的内容并将其应用于你的情况。希望你能让它工作。祝你好运!

作为"books_admin"用户,请尝试:

desc schema.books

如果可行,请尝试:

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

最新更新