【问题标题】:How to check if a role exists in Sybase如何检查 Sybase 中是否存在角色
【发布时间】:2011-05-05 03:43:53
【问题描述】:

任何人都知道如何检查 Sybase 数据库中是否已存在角色...我知道角色的名称

有一个 sysroles 表,但没有 name 列!

select * from sysroles

【问题讨论】:

    标签: sybase roles


    【解决方案1】:

    查看proc_role("role_name")(现已折旧为 has_role)或role_id("role_name")

    【讨论】:

      【解决方案2】:
      1. SELECT HAS_ROLE("role_name", 1) 告诉您执行代码段的用户是否具有角色,而不是角色是否存在。当然,您必须了解数据库上下文。

      2. 如果你要使用sys表,你需要看一下doco(PDF,不是在线的,可以下载),表图(显示关系),并习惯它们。表格几乎完全标准化。

      • sysroles 存在于每个用户数据库中,它在 db 中每个角色包含一行。它不需要“role_name”。
      • master..syssrvroles 在服务器中每个角色包含一行;你会在那里找到角色名称。
      
          -- Check if role exists in server
          SELECT [RolesInSvr] = svr.name
              FROM  master..syssrvroles svr
              WHERE name = "role_name"  
          -- Check if role exists in db
          SELECT [RolesInDb] = svr.name
              FROM  master..syssrvroles svr,
                    sysroles            db
              WHERE svr.srid = db.id
              AND   svr.name = "role_name"  
          -- List roles in db
          SELECT [RolesInDb] = svr.name,
                     [Locked]    = CASE svr.status & 2 
                          WHEN 2 THEN "Locked" 
                          ELSE         CHAR(0)
                          END
                     [Expired]   = CASE svr.status & 4 
                          WHEN 4 THEN "Expired" 
                          ELSE         CHAR(0)
                          END
                  FROM  master..syssrvroles svr,
                        sysroles            db
                  WHERE svr.srid = db.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-12
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 2012-07-28
        相关资源
        最近更新 更多