DB2授予权限(如SELECT / INSERT / etc)到模式的所有表

时间:2017-04-07 18:12:22

标签: sql database db2

我目前正在开展一些DB2工作,这需要我为模式中的所有表授予以下权限:

GRANT SELECT, INDEX, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, CREATE TEMPORARY TABLES ON MY_SCRATCH_SCHEMA.* to 'MY_USER'@'%';

以上是对MySQL的查询,但是,我需要为DB2重写它。

据我所知,没有命令将这些权限授予模式的所有表,您必须依赖于一个过程。但是知道它是DB2,那里有适用于不同版本DB2的文档,所以我有点不相信什么是在线的。

所以我的问题是 - 如何重写上面的DB2查询?

2 个答案:

答案 0 :(得分:0)

没有直接的方法通过QUery是DB2。您可以创建存储过程,也可以手动创建存储过程。您也可以执行以下操作

SELECT 'GRANT SELECT, INDEX, INSERT, UPDATE, DELETE, CREATE, 
DROP, ALTER, CREATE TEMPORARY TABLES ON ' || 
trim(system_table_schema)||'.'||trim(system_table_name) || 'TO USERID WITH GRANT OPTION ;'
 FROM QSYS2.systables WHERE SYSTEM_TABLE_SCHEMA ='SCHEMANAME'

运行以上查询,然后复制结果并运行结果。希望这可以帮助。对于很多用户ID,你可以将它们添加到一个组中并为该组名提供authoity

答案 1 :(得分:0)

我改编了uSeruSher对此的回答。出于某种原因,我的DB2实例中不存在QSYS2.systables,但我发现SYSIBM.TABLES存在SELECT 'GRANT SELECT, INDEX, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, CREATE TEMPORARY TABLES ON ' || trim(table_schema)||'.'||trim(table_name) || 'TO USERID WITH GRANT OPTION ;' FROM SYSIBM.TABLES WHERE TABLE_SCHEMA ='SCHEMANAME'

sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                menuItem menuItem = new menuItem(name.getText().toString(), description.getText().toString(), Integer.parseInt(price.getText().toString()), mChosenStorageRef.getDownloadUrl().toString());
                mChosenDBRef.push().setValue(menuItem);
            } catch (NumberFormatException exception) {
                Toast toast = Toast.makeText(MainActivity.this, R.string.price_error, Toast.LENGTH_LONG);
                toast.show();
            }

            name.setText("");
            description.setText("");
            price.setText("");