一般都认为Oracle中应该尽量把权限赋予角色而不是用户,这样管理和修改起来都比较方便。
我一直认为这里面没啥区别,不过今天遇到一个例子,才发现在PL/SQL中赋予角色的权限是被屏蔽的。也就是说即使当前用户所属的角色具有某个权限,在PL/SQL中也是没用的,必须显式赋予用户权限才行。
例子如下:
C:\Program Files\H2\bin>sqlplus sys/123456 as sysdba;
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 9 16:37:43 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> -- Create the user
SQL> create user TEST_DBA
2 identified by "123"
3 default tablespace USERS
4 temporary tablespace TEMP
5 profile DEFAULT;
用户已创建。
SQL> -- Grant/Revoke role privileges
SQL> grant dba to TEST_DBA;
授权成功。
SQL> -- Grant/Revoke system privileges
SQL> grant unlimited tablespace to TEST_DBA;
授权成功。
SQL> connect test_dba/123
已连接。
SQL> CREATE OR REPLACE PROCEDURE select_row IS
2
3 BEGIN
4 dbms_sql.parse(c=> dbms_sql.open_cursor,STATEMENT => 'select count(0) fro
m scott.emp',language_flag => dbms_sql.native);
5 END;
6 /
过程已创建。
SQL> exec select_row;
BEGIN select_row; END;
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 909
ORA-06512: 在 "SYS.DBMS_SQL", line 39
ORA-06512: 在 "TEST_DBA.SELECT_ROW", line 4
ORA-06512: 在 line 1
SQL> exec dbms_sql.parse(c=> dbms_sql.open_cursor,STATEMENT => 'select count(0)
from scott.emp',language_flag => dbms_sql.native);
PL/SQL 过程已成功完成。
这里 test_dba用户具有dba的角色,dba角色有select any table的权限,但test_dba用户自己并没有select any table的权限。所以尽管test_dba通过dba角色可以select scott.emp表,但对于他编译的stored procedure,按照
这里4楼
的说法
写道
因为PL/SQL编译时采用的是前联编技术,即编译时就对引用求值,GRANT是个DDL语句,而角色可以在不同的会话设置不同的,是在运行时才能确定其的值,所以为了保证前联编正常执行,ORACLE将角色都禁止了。
test_dba的角色在执行select_row时是不起作用的。要想能够执行,还得单独给用户权限
SQL> connect scott/tiger;
已连接。
SQL> grant select on emp to test_dba;
授权成功。
SQL> connect test_dba/123;
已连接。
SQL> exec select_row;
PL/SQL 过程已成功完成。
分享到:
相关推荐
PL/SQL是Oracle数据库管理系统中的一种编程语言,用于在数据库中创建、修改和管理数据库对象。PL/SQL提供了一种灵活的方式来实现数据库管理和开发。 在Oracle数据库中,用户权限是指用户对数据库对象的访问权限。...
- **安全性与权限管理**:介绍如何通过角色、用户和模式对象来实现安全访问控制。 - **性能优化**:提供多种提高PL/SQL程序性能的方法,例如使用绑定变量、减少网络往返次数等技术。 #### 六、高级PL/SQL主题 - **...
- 权限和角色:理解PL/SQL中的权限管理,包括GRANT和REVOKE。 - 视图(VIEW):在PL/SQL中使用视图进行数据抽象。 -索引组织表(IOT)、物化视图(Materialized View):与PL/SQL结合使用的高级表结构。 9. **PL...
4. **调试**:内置的调试器是PL/SQL工具的重要组成部分,它允许用户设置断点、单步执行代码、查看变量值和调用堆栈,以便找出和修复程序中的错误。 5. **版本控制集成**:许多PL/SQL工具还集成了版本控制系统,如...
总之,PL/SQL Developer提供的图形界面大大简化了Oracle定期计划任务的创建和管理,使得非DBA角色的开发者也能轻松完成这一工作。无论是简单的数据清理还是复杂的数据库维护,都可以通过这个强大的工具来实现。
Oracle PL/SQL 语言是Oracle数据库系统中的一种高级编程语言,它是SQL的扩展,专为数据库管理和应用程序开发设计。PL/SQL集成了SQL的查询、操纵、定义和控制功能,并添加了过程化编程元素,使其成为数据库管理和开发...
### PL/SQL Developer 11用户指南 #### 一、简介 **PL/SQL Developer** 是一款专为 Oracle 数据库开发人员设计的强大工具,旨在帮助他们高效地编写、调试及优化 PL/SQL 代码。本指南将详细介绍 **PL/SQL Developer ...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的控制结构,使得数据库管理员和开发人员能够创建复杂的数据处理逻辑和应用程序。本篇将深入探讨Oracle PL/SQL的最佳实践,...
- **编辑**: 支持直接在 PL/SQL Developer 中查看和编辑 XMLTYPE 数据。 ##### 6.8 直接查询导出 - **导出**: 将查询结果导出为文件。 - **格式**: 支持 CSV、Excel 等多种文件格式。 ##### 6.9 保存 SQL 脚本 - *...
Oracle PL/SQL是一款强大的Oracle数据库管理工具,专为开发人员和DBA设计,用于编写、测试和调试PL/SQL代码。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的功能,提供了更高级别的结构化编程特性。12.0.7版本...
### PL/SQL Developer 9.0 用户使用手册关键知识点总结 #### 一、介绍 - **PL/SQL Developer**:一款专为Oracle数据库设计的强大集成开发环境(IDE),旨在简化PL/SQL语言的编程工作。 - **版本**:9.0 - **发布...
在PL/SQL Developer 11g中,用户可以进行以下主要活动: 1. **代码编辑**:该工具提供了代码编辑器,支持语法高亮、自动完成和错误检查,帮助编写和调试PL/SQL代码。 2. **对象管理**:可以方便地创建、修改和删除...
PL/SQL(Procedural Language for SQL)是一种过程化语言,它允许用户在Oracle数据库环境中编写过程化代码块。这种语言的主要特点包括: - **过程化SQL**:PL/SQL将过程化编程结构(如条件判断、循环等)与SQL查询...
在实际应用中,Oracle还提供了丰富的安全管理特性,如用户权限管理、角色权限分配、审计功能等,以确保数据库的安全运行。了解并掌握这些安全机制,对于防止未经授权的数据访问和保护敏感信息至关重要。 通过本教程...
8. **安全性管理**:可以管理用户的权限和角色,确保数据安全。 9. **性能分析**:通过执行计划和 Explain Plan 功能,帮助开发者分析SQL语句的执行效率,找出性能瓶颈。 使用PL/SQL Developer,Java开发者可以更...
- PL/SQL中的角色和权限机制有助于管理数据库用户的访问权限,确保数据安全。 - GRANT和REVOKE语句用来授予和撤销用户对数据库对象的操作权限。 在安装和使用PL/SQL时,了解并掌握这些知识点是至关重要的。无论是...
PL/SQL程序设计是Oracle数据库系统中用于编写存储过程、函数和触发器的高级编程语言。它结合了SQL的强大查询能力与过程编程语言的灵活性,为数据库管理提供了一个全面的解决方案。 PL/SQL的基础包括变量的声明和...
- PL/SQL可以通过角色和权限管理来控制对数据库对象的访问,确保数据安全。 综上所述,Oracle PL/SQL是一个强大而灵活的工具,为开发高效、可靠的数据库应用程序提供了全面的环境。通过深入理解和熟练运用这些概念...
根据提供的文件信息,我们可以深入探讨Pl/SQL语法及其在Oracle数据库中的应用。下面将详细介绍文件中提到...Oracle数据库和PL/SQL提供了强大的功能,通过合理配置和使用这些功能,可以有效地管理和操作数据库中的数据。