如何为正在删除和重新创建的表保留GRANT?

Eli*_*ght 4 sql oracle grant oracle11g

我正在进行一个相当新的项目,我们仍在修改Oracle 11g数据库表的设计.因此,我们经常删除并重新创建表,以确保每当我们进行更改时,我们的表创建脚本都按预期工作.

我们的数据库由2个模式组成.一个模式有一些带INSERT触发器的表,这些表有时会将数据复制到第二个模式中的表中.这就要求我们必须登录到具有管理员帐户数据库,如sysdbaGRANT进入第一模式,以必要的表上第二个架构,如

GRANT ALL ON schema_two.SomeTable TO schema_one;
Run Code Online (Sandbox Code Playgroud)

我们的问题是,每次我们作出改变到我们的数据库设计,并希望删除并重新创建数据库表中,我们访问GRANT-ed来schema_one就走了,当表被删除.因此,这创建了另一个恼人的步骤,其中我们必须使用管理员帐户登录以在GRANT每次删除和重新创建这些表中的一个时重新访问.

这不是一个大问题,但我希望从我们的开发和测试程序中尽可能多地消除步骤.有没有办法以GRANT这样的方式访问表:GRANT-ed权限在被删除然后重新创建的表中存活?如果这是不可能的,那么还有更好的方法吗?

APC*_*APC 7

因此,授予被撤销的原因是新表是一个不同的对象.

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语句添加到该步骤?

因为授予对象的权限与创建表一样是安装的一部分.所以你应该有一个完成所有事情的过程.


Ale*_*ole 5

你可以授予select any tableinsert any table等来schema_one,但似乎有点小题大做,也不会反映在生产中(希望)做什么。当您以schema_two登录时,为什么不能在创建表的同时发放补助金?我一直在创建脚本中做到这一点,并且只需使用管理员帐户即可授予第三方或系统特权。我怀疑我错过了什么...