【问题标题】:DB2 revoke user privileges from a database from multiple usersDB2 从多个用户的数据库中撤销用户权限
【发布时间】:2019-10-28 15:46:11
【问题描述】:

我想撤销所有用户的所有特权,但数据库中的一个用户除外。 DB2 10.5 LUW

我的想法是这样的:

 db2 "revoke all on database from user IN (select grantee from syscat.dbauth where grantee not IN 'SAFEUSER')"

但我无法让它工作。

有什么想法吗?

【问题讨论】:

    标签: db2 privileges db2-luw sql-revoke


    【解决方案1】:

    REVOKE (database authorities) statement 中没有 ALL 子句。
    您可以生成以下 select 语句所需的语句集:

    select 
      'REVOKE '
    || SUBSTR 
    (
      CASE ACCESSCTRLAUTH WHEN 'N' THEN '' ELSE ', ACCESSCTRL' END 
    ||CASE BINDADDAUTH WHEN 'N' THEN '' ELSE ', BINDADD' END 
    ||CASE CONNECTAUTH WHEN 'N' THEN '' ELSE ', CONNECT' END 
    --- add here expressions with all other *AUTH columns
    , 2)
    ||' ON DATABASE FROM ' 
    || CASE 
         WHEN GRANTEE = 'PUBLIC' THEN ''
         WHEN GRANTEETYPE = 'U' THEN 'USER' 
         WHEN GRANTEETYPE = 'G' THEN 'GROUP' 
         WHEN GRANTEETYPE = 'R' THEN 'ROLE' 
       END
    ||' '||GRANTEE
    from syscat.dbauth
    WHERE 'Y' IN 
    (
    ACCESSCTRLAUTH, BINDADDAUTH, CONNECTAUTH
    --- add here all other *AUTH columns separated by ','
    )
    AND  grantee <> 'SAFEUSER'
    ;
    

    【讨论】:

    • 这会删除用户条目还是将所有权限设置为 N?
    • Db2 将删除 syscat.dbauth 中的条目,因为所有 AUTH 列都设置为 N。同样对于其他权限,您可以从sysibmadm.privileges生成类似的语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多