怎么oracle 数据库怎么赋予select any directory 权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么oracle 数据库怎么赋予select any directory 权限相关的知识,希望对你有一定的参考价值。

1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限

  /*管理员授权*/

  grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限

  grant unlimited session to zhangsan;//授予zhangsan用户使用表空间的权限

  grant create table to zhangsan;//授予创建表的权限

  grante drop table to zhangsan;//授予删除表的权限

  grant insert table to zhangsan;//插入表的权限

  grant update table to zhangsan;//修改表的权限

  grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)

  2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权

  /*oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的*/

  grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限

  grant drop on tablename to zhangsan;//授予删除表的权限

  grant insert on tablename to zhangsan;//授予插入的权限

  grant update on tablename to zhangsan;//授予修改表的权限

  grant insert(id) on tablename to zhangsan;

  grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update

  grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限
参考技术A oracle里的权限有两种权限,系统权限和对象权限,所谓系统权限,就是oracle里已经hardcode写死的权限,这些权限,我们是不能自己去扩展的,比如select any table, create any table. create table等,这里的权限已经在oracle里全部规定好了,
可以通过查看system_privilege_map这个数据字典表来查看所以的oracle系统内置的权限。
SQL> select * from system_privilege_map;
PRIVILEGE NAME PROPERTY
---------- ---------------------------------------- ----------
-3 ALTER SYSTEM 0
-4 AUDIT SYSTEM 0
-5 CREATE SESSION 0
-6 ALTER SESSION 0
-7 RESTRICTED SESSION 0
这里就是所有的内置的系统权限了,其实如果有开发过权限系统的经验的话,对这里的这个概念,可以理解为function permission,也就是你可以进行哪些操作。
参考技术B 直接赋予DBA权限好了。。 参考技术C grant select any directory to user

oracle的sql怎么定义变量啊

如在oracle的sql语句中,先定义一个变量a等于20110101(这个可以随便手工修改),然后insert into table1
select* from table2 where date=:a; 实现类似的功能,请问怎么做啊

create or replace procedure p_insert
(a  varchar2(8))
as
begin
insert into table1 select * from table2 where "date"=a;  
commit;
end;

上边是创建

执行时

begin
p_insert(\'20110101\') ;
end;

说一下,你这个a和表2里的类型必须都一致,都要是字符型,如果不是的话,输入参数a不可以变,你可以在表2里用to_char函数将日期转成这个格式

还有你表2里的字段叫date,这个是关键字,所以加了双引号

追问

不好意思,可能没说清楚,整个sql语句很长,很多地方都需要用到a这个变量的,那要把全部几百行的语句都写成存储过程啊

追答

写了存储过程后,你用记事本里替换一下就OK了啊

把所有的20110101换成a就好了,oracle只有存储过程里能用变量来处理,直接在sql上不太可能

参考技术A 不用存储过程那么麻烦的。。。

insert into table1 select* from table2 where date= &a;

执行的时候自动会跳出框让你填写a的值。。这里a是数值

如果a是字符或日期格式的的话那么改成

insert into table1 select* from table2 where date= '&a';追问

怎么在sql语句中给a赋值啊

追答

&a 就这样。你运行就知道了

追问

我知道,我的目的是在程序开始时给a赋值,然后后面就可以直接把a当数字用了

追答

比如 select*from a where id=&n;你运行之后后提示你 请输入n的值,这个时候赋值。

这个是SQL里变量的使用方法。每次运行每次手工赋值 你不要这样?还是你要自动赋值?还是什么意思???

追问

比如,想实现类似其他程序语言的做法

先给a赋值,类似
a:=1;
然后
insert into table1 select* from table2 where date= '&a';把赋值后的a插入数据库中
然后我可以用程序给a赋不同的值,然后分别插入数据库中
感谢这位兄台了

追答

你是想要程序赋值?不要人为的赋值是这个意思吗?还是什么意思?
insert into table1 select* from table2 where date= '&a' 你执行一次,提示你输入a 的值,你输入1那么程序就执行insert into table1 select* from table2 where date= ‘1’
你再执行一次 那么还会提示再次输入a 的值,你输入2
那么程序就执行insert into table1 select* from table2 where date= ‘2’
从你的问题看,难道这样不是你要的结果吗?。。。。如果不是这样的话,还请详细说明吧。。。到底你要做什么
另外这个是SQL不是编译语言。不要拿其他的思维来想。。。
SQL是解释型语言不是编译型的。。。这因为如此所以,才有PL/SQL

追问

就是想要程序赋值啊,不想手工输入
想达到上面写的效果
我先在程序中给a赋值
然后insert into table1 select* from table2 where date= '&a';把赋值后的a插入数据库中

sql做不到吗?

追答

这样的话sql 做不到。。。不是oracle的话还有别的办法。。
oracle只能用PL/SQL 也就是用存储过程

本回答被提问者采纳
参考技术B a integer;
b date;

另外 你的where语句不对 where date=a追问

能不能写全点啊,谢谢

以上是关于怎么oracle 数据库怎么赋予select any directory 权限的主要内容,如果未能解决你的问题,请参考以下文章

oracle中怎么赋予用户权限

oracle中怎么赋予用户权限

Oracle 创建用户 却赋予不了权限,该怎么处理

怎么新建一个oracle用户?

怎么用 PLSQL Developer 创建新的oracle数据库

oracle怎么创建用户和授予权限