Oracle新建的用户看不到表

1. 背景介绍
在Oracle数据库中,每个用户都有自己的schema,schema可以看作是用户的工作空间,用于存储表、视图、索引、过程等数据库对象。当管理员新建一个用户后,该用户默认没有任何权限和对象。因此,当新建的用户登录后,可能无法看到其他用户创建的表。本文将详细介绍为何新建的用户看不到表以及如何解决这个问题。
2. Oracle用户和权限
在Oracle数据库中,每个用户都有一个唯一的用户名,用户可以通过用户名和密码登录到数据库。用户可以创建自己的schema并在其中创建各种对象。 Oracle还提供了一系列的权限来控制用户对数据库对象的访问。权限可以分为以下两类:
2.1. 系统权限
系统权限控制用户对数据库整体的操作。例如,创建用户、创建表空间、备份数据库等。
2.2. 对象权限
对象权限控制用户对具体数据库对象(如表、视图、存储过程)的操作。例如,用户A可以对表A进行查询、更新操作,但对表B只有查询权限。
3. 新建用户看不到表的原因
当管理员新建一个用户后,该用户默认没有系统权限和对象权限。因此,在新用户登录后,无法看到其他用户创建的表是正常现象。
4. 授予对象权限给新用户
为新建的用户授予对象权限,让该用户可以看到其他用户创建的表,可以按照以下步骤进行操作:
4.1. 使用管理员账号登录到Oracle数据库
sqlplus sys as sysdba
4.2. 授权给新用户对象权限
假设新建的用户为new_user,要将用户user1创建的表table1授权给new_user,可以执行以下命令:
GRANT SELECT ON user1.table1 TO new_user;
这样new_user就被授予了对user1.table1的查询权限。
4.3. 刷新用户权限
在Oracle中,允许在登录后不刷新权限直接连接数据库。如果是在已登录的会话中授予了新的权限,需要使用以下命令刷新权限。
ALTER USER new_user ENABLE
这个命令会刷新用户的权限,使其可以查看到授予的对象。
4.4. 连接新用户并查看表
使用新用户登录到数据库后,可以执行以下命令查看授予了该用户的对象权限:
SELECT owner, table_name FROM all_tables;
该命令将返回当前用户可以访问的所有表的所有者和表名列表。
5. 示例
5.1. 创建用户和表
首先,使用管理员账号创建两个用户user1和user2,并且在用户user1的schema中创建一张表table1。
-- 使用管理员账号登录
sqlplus sys as sysdba
-- 创建用户
CREATE USER user1 IDENTIFIED BY password1;
CREATE USER user2 IDENTIFIED BY password2;
-- 授予用户CREATE SESSION权限,允许用户登录
GRANT CREATE SESSION TO user1;
GRANT CREATE SESSION TO user2;
-- 授权给用户user1创建表的权限
GRANT CREATE TABLE TO user1;
-- 使用user1用户登录
sqlplus user1/password1
-- 在user1的schema中创建表table1
CREATE TABLE table1 (id NUMBER, name VARCHAR2(50));
5.2. 授权给新用户
使用管理员账号登录到数据库,并将用户user1的表table1授权给new_user。
-- 使用管理员账号登录
sqlplus sys as sysdba
-- 授权给new_user查询user1的表table1的权限
GRANT SELECT ON user1.table1 TO new_user;
-- 刷新new_user的权限
ALTER USER new_user ENABLE;
-- 使用new_user登录
sqlplus new_user/new_password
5.3. 查看用户表
在new_user登录后,执行以下SQL命令查看可以访问的所有表:
SELECT owner, table_name FROM all_tables;
命令的输出将包含user1的表table1。
6. 总结
新建用户在Oracle中默认无法看到其他用户创建的表是因为新用户没有被授予相应的对象权限。通过为新用户授予对象权限,可以解决这个问题。本文介绍了如何授予新用户对象权限,并提供了示例代码演示了整个过程。
极客笔记