我在一个相当新的项目中,我们仍在修改Oracle 11g数据库表的设计。因此,我们经常删除并重新创建表,以确保我们的表创建脚本在我们进行更改时按预期工作。如何使一个GRANT持久存储被删除并重新创建的表?
我们的数据库由2个模式组成。一个模式具有一些表格,其中INSERT
触发器会导致数据有时被复制到我们的第二个模式中的表中。这要求我们使用管理员帐户(例如sysdba
和GRANT
)访问第一个模式的数据库登录到第二个模式的必要表,例如,
GRANT ALL ON schema_two.SomeTable TO schema_one;
我们的问题是,每次我们作出改变到我们的数据库设计,并希望删除并重新创建数据库表,我们GRANT
-ed到schema_one
走了,当表被删除的访问。因此,这又产生了另一个烦人的步骤,其中我们必须使用管理员帐户登录,以在每次删除和重新创建这些表中的一个时重新访问该访问权GRANT
。
这不是一个大问题,但我很想从我们的开发和测试程序中消除尽可能多的步骤。有没有办法以GRANT
访问表的方式使得GRANT
-ed权限在表被删除并重新创建之后存活?如果这不可能,那么是否有更好的方法来解决这个问题?
是的 - 对我们来说,这是表格创建脚本的一部分。我还必须错过问题描述中的某些内容。 – DaveE 2010-05-24 22:31:34
谢谢;我实际上不知道“SELECT ANY TABLE”特权;我知道没有''GRANT ALL ON schema_one。*''等同于我没有意识到我可以给这样的模式权限。 – 2010-05-25 14:04:13
虽然这可能不是你想要制作的东西,或者应该假设你会被允许拥有,除非你拥有该env。我不确定为什么你不能在创建表的同一个脚本中进行授权; schema_two应该能够将自己的对象的权限授予任何人,并且当您进行生产安装时,它也会为您节省一个步骤。有没有理由不能这样做? – 2010-05-25 14:15:06