如何检查Sybase中是否存在角色

时间:2010-11-04 15:57:02

标签: sybase roles

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

有一个sysroles表,但没有名称列!

select * from sysroles

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  1. SELECT HAS_ROLE(“role_name”,1)告诉您执行代码段的用户是否具有该角色,而不是角色是否存在。当然,您必须了解db上下文。

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

    • sysroles存在于每个用户db中,它在 db 中每个角色包含一行。它不需要“role_name”。
    • master..syssrvroles在服务器中每个角色包含一行;你会在那里找到role_name。
      
      -- Check if role exists in server
      SELECT [RolesInSvr] = svr.name
      FROM  master..syssrvroles 
      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