【发布时间】:2016-11-16 02:12:41
【问题描述】:
我正在解决 IBM DB2 中“功能”的变通方法。
这个奇特的数据库有一个“特性”,如果我尝试使用CREATE TABLE 语句并且它没有找到架构,它会为我创建这个架构,即使我不希望它.这个错误导致我在调试中花费了很多时间,因为我的代码现在存在,并期望它不会如果它不存在则创建模式
我的问题是——如何更改特定用户无权查看的特定架构(甚至在创建架构阶段)的权限?
我查看了这个doc..
好像GRANT,有以下三个权限:
阿尔特林 授予更改或评论所有对象的权限 架构。自动显式创建的模式的所有者 获得 ALTERIN 特权。
创造 授予创建权限 架构中的对象。所需的其他权限或特权 创建对象(如 CREATETAB)仍然是必需的。的所有者 显式创建的模式会自动接收 CREATEIN 特权。隐式创建的架构具有 CREATEIN 权限 自动授予 PUBLIC。
下降 授予放弃的特权 架构中的所有对象。显式创建的模式的所有者 自动获得 DROPIN 权限
只有 ALTERIN、CREATEIN 和 DROPIN,我看不到任何与查看访问权限相关的内容:/
编辑:
我使用以下 SQL 检查了我们的 Dash DB 数据库中的这个特定表,该表对特定用户具有这些特殊权限:
SELECT * FROM SYSIBMADM.PRIVILEGES WHERE OBJECTSCHEMA = 'FAKE_SCRATCH';
这是结果:
编辑 2:
我尝试了以下方法来模拟该用户对该架构的 Dash DB 权限:
GRANT ALTERIN, CREATEIN, DROPIN ON SCHEMA FAKE_SCRATCH TO USER TEST_USER;
还是不行:/
【问题讨论】:
-
这只是为你的数据库正确设置权限的问题 -- IMPLICIT_SCHEMA -- 但你会抱怨它太严格了。
-
@mustaccio 感谢您提供此链接!所以我猜这些
RESTRICTIVE权限只能在模式创建阶段完成? -
不行,创建数据库时只能指定
RESTRICTIVE。在现有数据库中,您应该从PUBLIC撤消IMPLICIT_SCHEMA(并且不要让您的应用程序以具有 DBADM 权限的用户身份连接)。 -
@mustaccio 再次感谢您的帮助。我查看了您分享的文章甚至随附的链接,但我真的看不出它在哪里向我们展示了如何从
PUBLIC撤消IMPLICIT_SCHEMA?另外,我如何不让应用程序以具有 DBADM 权限的用户身份连接?如果您可以将其写为答案,我会立即将您标记为答案! -
您使用
REVOKE语句撤销了权限,并且通过不提供您想要保护的授权ID 的密码来不允许应用程序连接。
标签: db2 sql-grant database-permissions