编译 Trigger 出错,错误的原因是找不到sequence,但是在 sql 里面使用这个sequence非常正常。找了半天原因,另一个同事试了一下给这个sequence授权,就可以编译通过了。
疑惑了很久,为什么sql中可以用,编译trigger就不能用了呢。
查了一些资料,才明白。
是因为 Oracle 在编译Procedu的时候,只检查当前用户的权限,而不管角色。所以,即使这个用户是DBA,也没有用,必须要对这个用户授权。这就是显式授权。
我在CSDN上找到了一个很好的文章,解释了显式授权和隐式授权的区别。
附在下面。
来自CSDN博客,http://blog.csdn.net/pashine/archive/2009/12/21/5050060.aspx
oracle 对象的授权
Oracle授权
一、授权语法
GRANT 语法:
1.显式授权(直接将对象授权给用户)
GRANT privilege [, ...] ON object [, ...] TO { Public| Group | Username|role} [WITH GRANT OPTION ]
2.隐式授权(通过将角色授权给用户)
GRANT role TO { Public| Group | Username|role}
语法说明:
privilege (权限)
可能的权限有:
SELECT--访问声明的表/视图的所有列/字段.
INSERT--向声明的表中插入所有列字段.
UPDATE--更新声明的所有列/字段.
DELETE --从声明的表中删除所有行.
RULE 在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL 赋予所有权限.
object 赋予权限的对象名.
可能的对象是:
table (表)
view (视图)
sequence (序列)
index (索引)
Public 代表是所有用户的简写.
Group 将要赋予权限的组GROUP .目前的版本中,组必须是用下面方法显式创建的.
Username 将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
role 某个角色,(如DBA)
WITH GRANT OPTION 允许向别人赋予同样权限,被授权的用户可以继续授权.
描述
对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限。
GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限。
说明
Oracle不允许在过程中使用未经显式授权的对象. 要使用另一用户的对象,必须通过另一用户给自己显示授权。
因为Oracle在编译存储过程时并不检查定义者拥有的角色,只是检查其被显式授予的权限,而DBA也是一种角色,所以即使是DBA,也需要显式授权。
二、授权方式 (显式和隐式)
对象授权有两种模式,显式和隐式:
显示授权和隐式授权的区别是:显示授权是直接把对象授权给用户,隐式授权是给用户授予角色的方式来实现授权。
1. 显式授权是直接用GRANT语句进行授权。
语法:GRANT 某种权限 TO 用户
如:
CONN USER1/Password
GRANT SELECT ON TABLE1 TO USER2; --- 将user1的表TABLE1的select 权限显示授权给user2
GRANT UPDATE ON TABLE1 TO USER2; --- 将user1的表TABLE1的update权限显示授权给user2
注:用system/manager登录是没法授权的,要使USER2用户能在存储过程里面访问USER1用户的表,必须以USER1用户(该用户有dba权限)登录,然后授权就可以了。
SQL>grant select on USER1.MA_USERINFO to USER2
2.隐式授权则是通过ROLE来授权。
语法:GRANT 某个角色 TO 用户
如:
CONN USER1
GRANT SELECT ON TABLE1 TO ROLE1; --- 将USER1的表TABLE1的select权限显示授权给Role1
CONN SYSTEM
GRANT ROLE1 TO USER2; --- 给USER2授与Role1的权限。
三、收回权限
语法:
revoke 权限 from 用户;
例子:
revoke select on table1 from User1; 收回查询select表的权限;
revoke all on table1 from User1;
grant connect to xujin;
revoke connect from xujin
revoke ROLE1 from USER2;
End
分享到:
相关推荐
- **游标操作**:深入了解游标的使用方法,包括显式游标和隐式游标。 - **包与类型**:学习如何使用PL/SQL包来组织代码,以及自定义数据类型的方法。 - **触发器**:掌握触发器的创建与使用,实现自动化的数据库操作...
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...
游标分为显式游标和隐式游标,显式游标需要手动打开和关闭,而隐式游标则由PL/SQL自动管理。 异常处理是PL/SQL中的重要特性,用于处理程序中出现的错误。PL/SQL的异常处理机制允许程序在遇到错误时执行特定的代码块...
掌握游标的使用,包括显式和隐式游标,以及如何在PL/SQL代码中移动游标、提取数据和更新记录。 3. **数据库对象**:Oracle程序设计通常涉及到对表、视图、索引、存储过程、函数、触发器、包等数据库对象的操作。...
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...
4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 过程的参数类型及传递 4.4 函数 4.4.1 创建函数 4.4.2 调用函数 4.4.3 删除函数 4.5 程序包 4.5.1 ...
4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 过程的参数类型及传递 4.4 函数 4.4.1 创建函数 4.4.2 调用函数 4.4.3 删除函数 4.5 程序包 4.5.1 ...
Oracle 提供了多种游标类型,包括隐式游标、显式游标等。 触发器 触发器是一个自动执行的程序,用于响应数据库事件,例如 insert、update、delete 等。触发器可以用来实现数据验证、数据转换、审核日志等功能。 ...
隐式游标是Oracle在执行SQL语句时自动使用的,无需程序员显式声明。创建用户和授权涉及数据库安全管理和权限控制。 【Servlet知识点】 Servlet是Java Web开发中用于扩展服务器功能的Java类。EL(Expression ...
- **安全性**: 使用Oracle数据工具进行安全管理,如授权和撤销权限等。 #### 二、复合数据类型 ##### 2.1 记录 - **定义**: 记录是由不同域组成的复合数据类型。 - **用途**: 用于存储具有相关性的多个数据项。 - *...
以上内容覆盖了Oracle数据库的基础知识、SQL语言操作、内置函数、PL/SQL编程、游标、视图、存储过程、触发器、事务与锁、备份与恢复等多个方面的知识点,旨在帮助读者全面理解和掌握Oracle数据库的关键技术。
13. **游标**:游标用于处理查询结果集,分为隐式和显式游标,以及强型和弱型游标,用于逐行处理数据。 14. **记录类型**:记录是具有命名字段的数据结构,可以包含不同类型的字段,便于处理复杂数据。 15. **子...
DCL用于授权和撤销权限;而DQL则主要用于查询数据。 **1.2 本章学习目的** - 本章的主要目标是帮助学习者熟悉Oracle SQL的基础知识,包括如何编写基本的SQL SELECT语句,理解SQL语句的基本结构及其功能,以及掌握...
值得注意的是,每次执行DDL语句后,Oracle会隐式提交当前事务。 2. DML(数据操纵语言)命令:用于查询和修改现有模式对象中的数据,包括DELETE、INSERT、SELECT和UPDATE语句,以及EXPLAIN PLAN(用于分析SQL执行...
13. **游标**:处理查询结果的机制,分为隐式和显式游标,以及强型和弱型。 14. **记录类型**:自定义数据结构,包含不同类型的字段。 15. **子程序**:过程和函数是子程序的两种形式,过程不返回值,函数返回值。...
11. 处理单行查询结果的游标通常是隐式游标,它是Oracle自动提供的,不需要显式声明。 12. 公用的子程序和常量应在包规范中声明,以实现封装和复用。 13. 数据字典视图`USER_SOURCE`包含存储过程的源代码文本。 ...
Oracle数据库是世界上最流行的数据库管理系统之一,尤其在企业级应用中占据重要地位。...对于初学者来说,通过实践操作和编写简单的SQL查询,逐步理解和应用这些概念,是学习Oracle数据库的最佳途径。
- **安全性管理**: 使用Oracle数据工具可以管理存储在服务器中的PL/SQL程序的安全性,实现授权和撤销等操作。 #### 二、复合数据类型 - **定义**: 复合数据类型是指由多个不同类型的简单数据组合而成的数据类型。 ...
第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...