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

发布于 2024-09-30 07:49:19 字数 127 浏览 4 评论 0原文

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

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

select * from sysroles

Anyone know how I can check if a role already exist in a Sybase database ... i have the name of the role

There is a sysroles table but no name column!

select * from sysroles

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白馒头 2024-10-07 07:49:19

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

Have a look at proc_role("role_name") (now depreciated to has_role) or role_id("role_name").

氛圍 2024-10-07 07:49:19
  1. SELECT HAS_ROLE("role_name", 1) 告诉您执行代码段的用户是否具有该角色,而不是该角色是否存在。当然,您必须了解数据库上下文。

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

  • sysroles 存在于每个用户数据库中,它在数据库中每个角色包含一行。它不需要“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
  1. SELECT HAS_ROLE("role_name", 1) tells you if the user executing the code segment has the role, not if the role exists. Of course you have to be aware of the db context.

  2. If you are going to use the sys tables, you need to look at the doco (PDF, not online, which can be downloaded), the table diagram (shows relations), and get used to them. The tables are almost completely normalised.

  • sysroles exists in each user db, it contains one row per role in the db. It does not need "role_name".
  • master..syssrvroles contains one row per role in the server; you will find the role_name there.

    -- 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文