欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Oracle 权限相关的概念

Oracle 权限相关的概念

2025/2/24 0:47:05 来源:https://blog.csdn.net/tech_craftsman/article/details/143193461  浏览:    关键词:Oracle 权限相关的概念

权限概念

Privileges - Oarcle 12.1

每个 Oracle 数据库对象都有拥有者(Owner)。权限可以控制一个用户是否可以访问其他用户的对象。

资源权限

ORA-01950: 对表空间 ‘USERS’ 无权限

报这个错误一般是创建用户的时候没有给用户分配表空间权限导致的。需要对模式的拥有者赋予权限。

-- 授权且限制使用容量上限
ALTER USER USER_NAME QUOTA 100M ON USERS;-- 授权且不限制使用容量上限
ALTER USER USER_NAME QUOTA UNLIMITED ON USERS;-- 不限制使用容量上限
GRANT UNLIMITED TABLESPACE TO USER_NAME;

需要注意,是对模式的拥有者赋予权限,而不是对于写入数据的人赋予权限,比如 SYSTEM 用户写入 TEST 模式报这个错误,是因为 TEST 用户本身对于 USERS 表空间没有使用权限,要对 TEST 用户授权而不是 SYSTEM 用户授权。

ORA-01950: 对表空间 ‘USERS’ 无权限_luckyjda的博客-CSDN博客

ORACLE ORA-01950 对表空间无权限 错误问题_左直拳的博客-CSDN博客

对象权限授权

oracle11g - Grant SELECT on multiple tables oracle - Stack Overflow

GRANT

Oracle 给对象权限授权的时候,一次只能给授权一个对象相关的权限。

即,允许某个用户访问某张表,只能针对单张表进行授权。

角色权限

Oracle 数据库中可以授予 DBASELECT_CATALOG_ROLE 等角色给用户,从而一次性授予用户一组权限。

需要注意的是,如果通过角色给用户授权,被授权的用户一般需要重新连接数据库才能生效,具体原因参考:

在 Oracle 数据库中,我发现给用户授予一个角色,比如 SELECT_CATALOG_ROLE,对应用户需要重新连接到数据权限才能生效,为什么?

BingAI:

在 Oracle 数据库中,当我们通过角色授予用户权限时,需要用户重新登录才能获得授予的权限。这是因为 Oracle 在建立会话时,会获取并缓存用户的权限信息。如果在会话期间更改了用户的权限(例如,通过授予或撤销角色),则这些更改不会立即反映在当前会话中,因为权限信息已经被缓存了。因此,用户需要重新连接到数据库,以便 Oracle 可以获取并缓存最新的权限信息²。这就是为什么授权后用户需要重新连接的原因。希望这个解释对您有所帮助!

源: 与必应的对话, 2023/10/29
(1) 如何理解Oracle中"通过角色授权"需要用户重新登陆_oracle授权表权限,用户需要重连吗-CSDN博客. https://blog.csdn.net/kkdelta/article/details/7645952.
(2) Oracle用户、授权、角色管理 - Happy丶小鱼 - 博客园. https://www.cnblogs.com/sinosoft/p/11642845.html.
(3) ORACLE授权用户select/update/delete另一个用户下的表与视图等 - 知乎. https://zhuanlan.zhihu.com/p/633845864.
(4) undefined. https://www.cnblogs.com/empty01/p/5565127.html.

或者可以考虑通过 SET ROLE 使角色授权立刻生效。

Oracle 赋权和回收权限的生效时间_DBA Fighting!的技术博客_51CTO博客

实验:体会Oracle权限/角色赋予的差异-腾讯云开发者社区-腾讯云

如何理解Oracle中"通过角色授权"需要用户重新登陆_oracle授权表权限,用户需要重连吗-CSDN博客

SET ROLE

常见场景

一个用户向另外一个用户模式下的表中读写数据

授权:

GRANTSELECT,INSERT,UPDATE,DELETE
ONschema.books
TObooks_admin;

回收权限

REVOKESELECT,INSERT,UPDATE,DELETE
ONschema.books
FROMbooks_admin;

一个用户在另外一个用户模式建表

Oracle 中,有 SYSTEM 权限的用户可以在任意模式下建表。

普通用户有 CREATE TABLE 权限之后只能在自己的模式下建表。如果想在别的用户的模式下建表,需要 CREATE ANY TABLE 权限。

但是 CREATE ANY TABLE 权限太大了,但是 Oracle 目前并没有提供更细粒度的控制方式。有的回答中提到可以在另外一个模式中创建一个存储过程,存储过程可以建表,然后把存储过程的权限授权给需要建表的用户。

GRANT CREATE ANY TABLE TO TEST3;
GRANT CREATE ANY INDEX, CREATE ANY SEQUENCE TO TEST3;
GRANT DROP ANY TABLE TO TEST3;

How to ‘GRANT’ create a table in Oracle - Quora

Oracle : Grant Create table in another schema? - Stack Overflow

oracle - CREATE ANY TABLE not sufficient for creating any table? - Stack Overflow

存储过程权限

存储过程的权限只有两种:EXECUTEDEBUG

如果尝试授予别的权限,会报错:ORA-02225: 只有 EXECUTE 和 DEBUG 权限对过程有效。

只有 EXECUTE 权限才是真正的执行权限,DEBUG 权限是没有执行权限的。

所以,只需要授予存储过程的DEBUG权限给某个用户,就可以实现只授予用户查看存储过程定义的权限,而限制用户修改、执行存储过程。从而达到只授权用户查看存储过程定义的权限。不过这样实现,总让我感觉有点怪怪的。

——如何只授予用户查看存储过程定义的权限 - 潇湘隐者 - 博客园

权限大全

SELECT_CATALOG_ROLE 权限

SELECT ANY DICTIONARY 权限的区别:

授予两种权限之后都可以查询 V$ 开头的一些系统表,但是,授予 SELECT_CATALOG_ROLE 权限之后不会立刻生效,要么手动调用 SET ROLE SELECT_CATALOG_ROLE 才会生效,要么账号重新登录后才会生效。而 SELECT ANY DICTIONARY 的授权和回收都是立刻生效的。而 SELECT_CATALOG_ROLE 的授权和回收都不是立刻生效的。

[转]select any dictionary与select_catalog_role区别 - Solovon - 博客园

select any dictionary vs. select_catalog_role

Hemant’s Oracle DBA Blog: The difference between SELECT ANY DICTIONARY and SELECT_CATALOG_ROLE

EXECUTE_CATALOG_ROLE 权限

授予 EXECUTE_CATALOG_ROLE 权限之后,可以执行 SYS 中的一些存储过程。但是和 SELECT_CATALOG_ROLE 一样,这个权限不是立刻生效的,需要重新登录或者手动设置角色。

Configuring Privilege and Role Authorization

SELECT ANY DICTIONARY 权限

SELECT ANY DICTIONARY - What Privileges Does it Have - SELECT_CATALOG_ROLE - petefinnigan.com

关于 SYSTEM 账号

相关系统表

DBA_ROLE_PRIVS

DBA_ROLE_PRIVS describes the roles granted to all users and roles in the database.

——DBA_ROLE_PRIVS

包含授权给所有角色和用户的角色信息。

常用操作

查看用户所有权限

Oracle_Scripts/find_all_privs2.sql at master · vishaldesai/Oracle_Scripts【但是这个一个 SQLPlus 脚本,没办法直接用 JDBC 执行。】

PeteFinnigan.com Tools【PeteFinnigan 提供的一系列有用脚本】

How to Show All Oracle Database Privileges for a User | Tutorial by Chartio

sql - How to show all privileges from a user in oracle? - Stack Overflow

参考资料

  1. Privileges
  2. ORA-01950: 对表空间 ‘USERS’ 无权限_luckyjda的博客-CSDN博客
  3. permissions - Oracle no privileges on tablespace USERS - Database Administrators Stack Exchange
  4. How to Create a User and Grant Permissions in Oracle | Tutorial by Chartio
  5. ORACLE ORA-01950 对表空间无权限 错误问题_左直拳的博客-CSDN博客
  6. 如何只授予用户查看存储过程定义的权限 - 潇湘隐者 - 博客园
  7. 简单介绍下Oracle有哪些预定义角色? - 墨天轮
  8. Configuring Privilege and Role Authorization

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词