oracle数据库我新建了一个用户,只赋予这个用户connect的权限,没有赋予select any table的权限,但是我发现登陆这个用户之后仍然可以查询其他用户的表,如select * from nrsdb.tfp_info;
那么select any table这个权限 赋予与否有什么区别吗?? 没搞明白 请大神指点
------解决思路----------------------
查看一下用户当前拥有的权限就一目了然了:
select privilege
from dba_sys_privs
where grantee = 'username'
union
select privilege
from dba_sys_privs
where grantee in
(select granted_role from dba_role_privs where grantee = 'username');
------解决思路----------------------
11g中connect角色只具有CREATE SESSION的权限
10g r2之前connect角色具有权限,无论是11g还是10g中的connect角色都没有权限去查询别的用的表
CREATE SESSION
CREATE TABLE
CREATE VIEW
CREATE SYNONYM
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
ALTER SESSION
11g中:
SQL> select * from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
CONNECT CREATE SESSION NO
所以赋予connect角色是不能访问其他用的表的
你可以查看用户下具有的系统权限
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
在查看用户下具有的对象权限来看用户是否对其他用户的表有select权限
SQL> select * from user_tab_privs;
GRANTEE OWNER
------------------------------ ------------------------------
TABLE_NAME GRANTOR
------------------------------ ------------------------------
PRIVILEGE GRA HIE
---------------------------------------- --- ---
U3 U1
TAB1 U1
SELECT NO NO
------解决思路----------------------
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 11月 6 09:50:09 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
SQL> set linesize 2000
SQL> drop user test purge;
drop user test purge
*
第 1 行出现错误:
ORA-00921: 意外的 SQL 命令结尾
SQL> drop user test cascade;
用户已删除。
SQL> create user test identified by test;
用户已创建。
SQL> grant connect to test;
授权成功。
SQL> conn test/test
已连接。
SQL> select * from scott.emp;
select * from scott.emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> conn scott/tiger
已连接。
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 1 20