Как проверить, существует ли роль в Sybase - PullRequest
0 голосов
/ 04 ноября 2010

Кто-нибудь знает, как я могу проверить, существует ли уже роль в базе данных Sybase ... У меня есть имя роли

Есть таблица sysroles, но нет столбца имени!

select * from sysroles

Ответы [ 2 ]

0 голосов
/ 06 ноября 2010
  1. SELECT HAS_ROLE ("role_name", 1) сообщает, имеет ли пользователь, выполняющий сегмент кода, роль, а не существует ли эта роль. Конечно, вы должны знать о контексте БД.

  2. Если вы собираетесь использовать таблицы sys, вам нужно взглянуть на документ (PDF, не онлайн, который можно загрузить), диаграмму таблицы (показывает отношения) и привыкнуть к ним. Таблицы практически полностью нормализованы.

    • sysroles существует в каждой пользовательской базе данных, она содержит одну строку для каждой роли в db . Это не нуждается в "role_name".
    • master..syssrvroles содержит одну строку для каждой роли на сервере ; Вы найдете там имя_ роли.
      <code>
      -- Check if role exists in server
      SELECT [RolesInSvr] = svr.name
      FROM  master..syssrvroles 
      WHERE name = "role_name"<br>
      -- 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"<br>
      -- 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
      
0 голосов
/ 05 ноября 2010

Посмотрите на proc_role ("role_name") (теперь не рекомендуется has_role) или role_id ("role_name") .

...