如何撤消用户对DB2中数据库元数据表的访问

时间:2019-01-30 20:58:19

标签: database db2 access

我试图通过使用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是存储所有数据库相关信息的地方。我想限制对此的访问,以便用户无法获取有关我的数据库的元数据。

2 个答案:

答案 0 :(得分:3)

来自https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.sec.doc/doc/c0054269.html

  

在非限制性数据库中,特殊组PUBLIC被授予以下特权:

     

在所有SYSCAT和SYSIBM表上进行选择

(除其他事项外,请参见手册页以获取完整列表)

因此,您需要从PUBLIC撤消访问权限

您可能还想阅读上一页链接的文章。 A practical guide to restrictive databases

答案 1 :(得分:0)

从10.5.5开始,您可以CREATE PERMISSION使用系统目录表。这使您能够“隐藏”特定用户的某些对象,但是您需要自己编写逻辑代码。

例如,可能是这样:如果用户具有表特权或在数据库上具有DATAACCESSACCESSCTRL,则用户可以看到表定义。