Eli*_*ght 4 sql oracle grant oracle11g
我正在进行一个相当新的项目,我们仍在修改Oracle 11g数据库表的设计.因此,我们经常删除并重新创建表,以确保每当我们进行更改时,我们的表创建脚本都按预期工作.
我们的数据库由2个模式组成.一个模式有一些带INSERT触发器的表,这些表有时会将数据复制到第二个模式中的表中.这就要求我们必须登录到具有管理员帐户数据库,如sysdba与GRANT进入第一模式,以必要的表上第二个架构,如
GRANT ALL ON schema_two.SomeTable TO schema_one;
Run Code Online (Sandbox Code Playgroud)
我们的问题是,每次我们作出改变到我们的数据库设计,并希望删除并重新创建数据库表中,我们访问GRANT-ed来schema_one就走了,当表被删除.因此,这创建了另一个恼人的步骤,其中我们必须使用管理员帐户登录以在GRANT每次删除和重新创建这些表中的一个时重新访问.
这不是一个大问题,但我希望从我们的开发和测试程序中尽可能多地消除步骤.有没有办法以GRANT这样的方式访问表:GRANT-ed权限在被删除然后重新创建的表中存活?如果这是不可能的,那么还有更好的方法吗?
因此,授予被撤销的原因是新表是一个不同的对象.
SQL> select object_id from user_objects
2 where object_name = 'T72'
3 /
OBJECT_ID
----------
659195
SQL> drop table t72
2 /
Table dropped.
SQL> create table t72 (id number)
2 /
Table created.
SQL> select object_id from user_objects
2 where object_name = 'T72'
3 /
OBJECT_ID
----------
659212
SQL>
Run Code Online (Sandbox Code Playgroud)
授权是在对象上,而不是对象的名称.
我不明白你的问题是这样的:你有一个删除并重新创建表的进程schema_two.为什么该进程也没有授予这些表的授予权限schema_one?为什么你有一个管理员帐户呢?我假设您正在连接schema_two以运行DROP和CREATE语句.为什么不将GRANT语句添加到该步骤?
因为授予对象的权限与创建表一样是安装的一部分.所以你应该有一个完成所有事情的过程.
你可以授予select any table,insert any table等来schema_one,但似乎有点小题大做,也不会反映在生产中(希望)做什么。当您以schema_two登录时,为什么不能在创建表的同时发放补助金?我一直在创建脚本中做到这一点,并且只需使用管理员帐户即可授予第三方或系统特权。我怀疑我错过了什么...