Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中删除对象后权限丢失_Sql_Oracle_Schema_Privileges_Warehouse - Fatal编程技术网

Sql 在Oracle中删除对象后权限丢失

Sql 在Oracle中删除对象后权限丢失,sql,oracle,schema,privileges,warehouse,Sql,Oracle,Schema,Privileges,Warehouse,我有一个数据仓库,它包含用于报告的特定模式。任何被授予访问权限的人都将被授予该模式中对象的权限。但是,每当我删除对象时,这些特权就会丢失 对于此类问题,保留现有特权的最佳解决方案是什么 当我们将一个对象的访问权授予其他模式时,删除该对象是非常困难的。无论删除表和重新授予特权之间的窗口有多小,其他用户都会有一段时间查询失败或依赖对象失效。避免这种情况发生的唯一方法是使数据库脱机。这可能会给更多的人带来不便,所以我们可能不想这样做 (即使我们的模式是唯一使用删除表的模式,这也是一个问题,但通常我们对

我有一个数据仓库,它包含用于报告的特定模式。任何被授予访问权限的人都将被授予该模式中对象的权限。但是,每当我删除对象时,这些特权就会丢失


对于此类问题,保留现有特权的最佳解决方案是什么

当我们将一个对象的访问权授予其他模式时,删除该对象是非常困难的。无论删除表和重新授予特权之间的窗口有多小,其他用户都会有一段时间查询失败或依赖对象失效。避免这种情况发生的唯一方法是使数据库脱机。这可能会给更多的人带来不便,所以我们可能不想这样做

(即使我们的模式是唯一使用删除表的模式,这也是一个问题,但通常我们对它的控制稍微多一点。)

对于此类问题,保留现有特权的最佳解决方案是什么

最好的解决方案是不要掉落对象。不断地删除和重新创建对象,尤其是表,是一种糟糕的做法。没有必要在实时环境中这样做。本实践认为,使用正确的命令或适当的数据结构,可以更好地解决它的寻址问题

然而,你似乎发现自己在一个固执的项目上,坚持这种错误做法的正确性。因此,您必须删除并重新创建这些表,然后需要向这些表的用户重新授予特权**(*)***。这应该非常简单:创建表的脚本(您应该在本练习中引用该脚本)还应该包含授予必要特权的语句

当然,这假定您的项目遵循了关于DDL脚本的源代码控制的良好实践。在这种情况下,我的希望并不高


当然,在某些情况下,删除并重新创建表是一个很好的解决方案。例如,在为分区交换操作准备大量数据时,删除和重新创建可能比截断和插入更有效。但是这样的用例是利基用例,通常不与向其他模式授予特权相关联



(*)需要这样做是删除表是不好的做法的原因之一

最好的解决方案是——不要丢弃对象。为什么需要删除对象?仍然,为什么需要重新创建它们?目的是什么?如果需要清除数据,为什么“截断”还不够?因为我看到删除和重新创建它们的唯一目的是“强制清理”数据。DB对象不应该随时删除/重新创建,这是一种不好的做法。对于视图和其他一些对象,您可以使用
CREATE或REPLACE…
语法。这保留了特权。你说的是什么类型的对象?对于表或快照,您应该使用
TRUNCATE
,对于视图,您可以使用
创建或替换…
。然后,您应该说服项目负责人更改这些愚蠢的要求。这样做的目的是什么?