我可以访问不同数据库中的某些模式,并且作为一些迁移工作的一部分,我正在比较2个模式。
我使用Syscat
来比较2架构。但是在其中一个模式中,我收到错误说
“用户没有”
选择权限
我想知道,我怎样才能看到在特定模式中设置了什么和所有访问权限(基本上所有具有访问权限的用户和gievn模式的访问类型)。数据库是db2。
请注意,我没有使用任何工具,如架构爬虫等。相反,我正在编写一个JDBC应用程序,它使用Syscat
来查询详细信息,如select * from syscat.tables where tabSchema = <schemaName>
使用工具等在获得批准,理由等方面是一个漫长的过程(我个人认为JDBC程序应该从分析开始是好的。)
答案 0 :(得分:0)
在模式上授予的DB2权限中,不会为属于该模式的对象提供任何权限(除非您自己创建了这些对象)。您必须被授予显式对象权限或某些数据库级权限,例如DATAACCESS。
实际的DB2错误消息应包含生成错误的对象的名称。尝试打印SQLException对象的String表示。
答案 1 :(得分:0)
架构是一组逻辑对象。这些对象可以是视图,表,索引,序列,函数,sotred过程等。这些对象中的每一个都具有不同的权限集:表具有select,insert,delete等;存储过程具有执行权和其他功能;这意味着每个对象都有不同类型的权限,并且您无法获得“给定模式的所有权限”,您必须提供对象类型。
例如,为了获得给定模式的表的权限,您可以执行
db2 "
select substr(GRANTEE,1,16),GRANTEETYPE,substr(tabschema || '.' || tabname,1,64),
CONTROLAUTH, ALTERAUTH, DELETEAUTH, INDEXAUTH, INSERTAUTH, REFAUTH, SELECTAUTH, UPDATEAUTH
from syscat.TABAUTH
where tabschema like 'MYSCHEMA%'"
syscat架构中包含该类对象特权的表的每种对象。你只需要查询表格。
以类似的方式,您可以创建适当的句子,以授予或撤销对象的权限
select 'grant select on ' || trim(tabschema) || '.' || trim(tabname) ' to user johndoe'
from syscat.tables
where tabschema like 'MYSCHE%'
最后,db2上不仅有权限(授权),还有数据库级权限,其中一些权限对所有对象都有权限。