通过oracle数据库链执行DML需要什么权限

对于本地的用户,执行INSERT操作只需要INSERT权限,而只有INSERT权限这对于通过数据库链执行插入操作是不够的。

看Oracle的管理员手册是发现了这个问题,以前还确实没有注意过。

看一个具体的例子,首先在本地建立一个普通用户,并将表T的INSERT、UPDATE和DELETE权限授权给这个用户:

SQL> show user

USER is "TEST"

SQL> create table t (id number);

Table created.

SQL> create user u1 identified by u1;

User created.

SQL> grant create session to u1;

Grant succeeded.

SQL> grant insert, update, delete on t to u1;

Grant succeeded.

SQL> conn u1/u1

Connected.

SQL> insert into test.t values (1);

1 row created.

SQL> update test.t set id = 2;

1 row updated.

SQL> delete test.t;

1 row deleted.

SQL> commit;

Commit complete.

在本地执行,用户U1可以对T表执行INSERT、UPDATE和DELETE的操作。

下面在远端建立数据库链,使用U1作为连接用户:

SQL> select * from global_name;

GLOBAL_NAME

--------------------------------------------------------------------------------

TESTRAC

SQL> create database link test08

 2  connect to u1

 3  identified by u1

 4  using '172.25.13.229/test08';

数据库链接已创建。

SQL> select * from global_name@test08;

GLOBAL_NAME

本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45464.htm

--------------------------------------------------------------------------------

TEST08

SQL> insert into test.t@test08 values (1);

insert into test.t@test08 values (1)

*

第1行出现错误:

ORA-01031: insufficient privileges

ORA-02063:紧接着line (起自TEST08)

SQL> update test.t@test08 set id = 1;

update test.t@test08 set id = 1

*

第1行出现错误:

ORA-01031: insufficient privileges

ORA-02063:紧接着line (起自TEST08)

SQL> delete test.t@test08;

delete test.t@test08

*

第1行出现错误:

ORA-01031: insufficient privileges

ORA-02063:紧接着line (起自TEST08)

这是由于通过数据库链访问远端对象的时候,Oracle需要查询权限来对表结构进行分析,因此如果是通过数据库链执行DML操作,除了对应的DML权限外,用户还需要SELECT权限。

SQL> conn test/test

Connected.

SQL> grant select on t to u1;

Grant succeeded.

有了SELECT权限,通过数据库链执行DML就可以顺利执行了:

SQL> insert into test.t@test08 values (1);

已创建1行。

SQL> update test.t@test08 set id = 2;

已更新1行。

SQL> delete test.t@test08;

已删除1行。

SQL> commit;

提交完成。

SQL> select * from test.t@test08;

未选定行

时间: 2024-08-30 12:16:26

通过oracle数据库链执行DML需要什么权限的相关文章

ORACLE数据库查看执行计划

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明. 一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗

ORACLE数据库查看执行计划的方法_oracle

一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗费等基本信息,其实这个可以在PL/SQL工具里面设置的.可以看到很多其它信息,如下所示 2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤 复制代码 代码如下: SQL>EXPLAIN PLAN FOR SEL

JSP实现oracle数据库链库的常见方法

import java.sql.*; Jbuilder正确连接 oracle Arrayi需要注意的几个问题 oracle8以上的应该都使用classes12.jar文件作为jdbc驱动: 正确设置windows的classpath和jbuilder中的enterprise setup .configure libraries,将casses12.jar路径正确添加到上述需要设置的地方: 进入database pilot,在database pilot中,file---new 在driver列表

oracle数据库01-连接&用户&权限

     Oracle数据库是Oracle(中文名称叫甲骨文)公司的核心产品,Oracle数据库是一个适合于大中型企业的数据库管理系统.      Oracle数据库涉及银行.电信.移动通信.航空.保险.金融.电子商务和跨国公司等,Oracle的市场占有率最高,显然Oracle的主要用户涉及面非常广.      Oracle产品是免费的,可以在Oracle官方网站上下载到安装包,但是Oracle服务是收费的.在Java开发中,Oracle数据库是非常理想的选择.           http:/

Oracle数据库入门之DML与事务控制

insert语句 语法:insert into table [(column1, column2...)] values (value1, value2...); 说明:insert语句每次只能向表中插入一条记录.缺省字段名列表时,应为新插入记录中的每个字段显式的设定新值 也可在insert语句中指定赋值字段列表,只为部分字段显式设定新值,其余字段将被缺省赋值为null 举例:insert into dept values(88,'研发部','北京');--此句便是缺省字段名列表的情况 inse

ASP.NET访问Oracle数据库:执行SQL语句过程

Web服务器的配置: 1.安装Oracle 客户端 参考<Oracle 9i & PLSQL 全简体中文版数据库安装过程(图解)>,在选择安装的时候仅安装客户端即可 2.为安装客户端的服务器配置Net 服务 参考 <Oracle 9i/10g 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程> 3.新建一个用户,并赋予OBA角色 1.通过PL SQL 建立用户 使用SysDBA系统用户登陆 PLSQL ,建立一个用户 赋给此用户OBA角色.

介绍了Oracle数据库锁的种类及研究

本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的现象,提出了相应的解决方法和具体的分析过程. 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某

索引和检索 无效-关于oracle数据库索引

问题描述 关于oracle数据库索引 执行sql如下: select * from lm3.cc03 where aae017 in ( select distinct natl.jgid from be3.agency_natl natl, be3.agency_config conf where natl.jgid = conf.jgid and conf.ywlb = '02' start with natl.jgid = '37100106' connect by prior conf.

Oracle 数据库之最:你见过最高的 SQL Version 是多少?

Oracle数据库中执行的SQL,很多时候会因为种种原因产生多个不同的执行版本,一个游标的版本过多很容易引起数据库的性能问题,甚至故障. 有时候一个SQL的版本数量可能多达数万个,以下是我之前在"云和恩墨大讲堂"分享过的一个案例.这个报告中的 SQL,最高达到了26万个 SQL 版本.算是我见过的"之最"之一. 产生SQL多版本的原因很多,通过如下的一些测试我们可以稍微来看看如何分析和找到可能的原因. 以下作为一个基础测试数据,一条基本的SQL查询: create