我正在尝试创建具有PUBLIC角色所有权限的新角色,然后从PUBLIC角色中删除所有权限。这是出于安全目的。
这就是问题所在。我无法将SYS./1005bd30_LnkdConstant和其他格式相同的人授予我的新角色。
样品:
SYS./10076b23_OraCustomDatumClosur SYS./100c1606_StandardMidiFileRead ORDSYS./1013c29d_PlanarImageServerPro 。 。
我真的需要这些或我的新“公共”角色可以不用那些吗?
非常感谢任何帮助。
答案 0 :(得分:0)
让我在这里快速猜测一下。您遇到的问题是对象名称区分大小写。快速解决方法是将对象名称用双引号括起来,如下所示。
GRANT EXECUTE ON SYS."/1005bd30_LnkdConstant" TO mynewpublicrole;
您表示您“无法将[EXECUTE ON] SYS./1005bd30_LnkdConstant”授予角色。
我认为这意味着当您运行GRANT语句时,Oracle引发了异常,很可能是
ORA-00903: invalid table name
将对象名括在双引号中(如示例所示)应解决该问题。
无法回答新角色是否需要对这些对象拥有EXECUTE特权的问题。嗯,这个角色并不一定需要它们。问题是用户是否需要它们(无论是直接授予还是通过角色间接授予)。这可以通过全面测试来确定。
其他一些评论。
如果您打算创建一个新角色并将该角色授予所有用户,我不会看到安全性已更改或改进。所以,我会假设事实并非如此。
您似乎正在尝试应用“最小特权”原则。我为这种努力喝彩。
我看到应用程序开发人员遵循的最常见模式之一是让应用程序作为模式对象的所有者连接到数据库。这意味着应用程序具有它可能不需要的各种权限,例如DROP TABLE,ALTER PROCEDURE等。
我们使用的模式是拥有拥有架构对象的“OWNER”用户,以及拥有“OWNER”对象所需特定权限的单独“APP”用户,以及“OWNER”对象的同义词。 (同义词允许引用OWNER.object而不用OWNER限定。)几乎不言而喻,我们不向PUBLIC授予权限,我们在需要时授予角色。
我提到这是因为它是我们用来实现“最小特权”原则的模式。
对于其他安全问题,我建议您查看“Oracle安全检查表”白皮书:
执行GRANT语句时可能遇到的其他一些可能的异常:
ORA-01031: insufficient privileges
或
ORA-04042: procedure, function, package, or package body does not exist.
在其中任何一种情况下,请确保以SYS(SYSDBA)身份连接到数据库以授予权限。我们几乎总是将权限授予对象的所有者,而不是将其他用户作为GRANTEE。我几乎从不在对象权限上使用“WITH GRANT OPTION”。这是一个更简单的模型,避免了依赖树的任何潜在问题。