我试图通过使用Sysibm模式获取数据库的元数据信息来撤消对用户(无论是testUser还是db2instance用户)的访问。如果我运行以下查询
SELECT NAME, COLTYPE, LENGTH FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = 'tableName';
我获得了在查询中传递的表上的信息。可以采取什么措施来限制对用户的访问?
我跑了
REVOKE ALL ON TABLE SYSIBM.SYSCOLUMNS FROM user;
并收到以下错误:
com.ibm.db2.jcc.am.SqlSyntaxErrorException: An attempt to revoke a privilege, security label, exemption, or role from "USER" was denied because "USER" does not hold this privilege, security label, exemption, or role.. SQLCODE=-556, SQLSTATE=42504
即使使用db2instance用户,我也会收到相同的错误消息。但是,select语句可以给我正确的结果。
我相信Sysibm是存储所有数据库相关信息的地方。我想限制对此的访问,以便用户无法获取有关我的数据库的元数据。
答案 0 :(得分:3)
在非限制性数据库中,特殊组PUBLIC被授予以下特权:
在所有SYSCAT和SYSIBM表上进行选择
(除其他事项外,请参见手册页以获取完整列表)
因此,您需要从PUBLIC
撤消访问权限
您可能还想阅读上一页链接的文章。 A practical guide to restrictive databases
答案 1 :(得分:0)
从10.5.5开始,您可以CREATE PERMISSION使用系统目录表。这使您能够“隐藏”特定用户的某些对象,但是您需要自己编写逻辑代码。
例如,可能是这样:如果用户具有表特权或在数据库上具有DATAACCESS
或ACCESSCTRL
,则用户可以看到表定义。