文章
姚 鑫 · 九月 11 阅读大约需 3 分钟

第十三章 SQL命令 CREATE ROLE

第十三章 SQL命令 CREATE ROLE

创建角色

大纲

CREATE ROLE role-name

参数

  • role-name - 要创建的角色的名称,它是一个标识符。角色名称不区分大小写。

描述

CREATE ROLE命令可创建角色。角色是可以分配给多个用户的一组命名权限。一个角色可以分配给多个用户,一个用户可以分配多个角色。角色在系统范围内可用,它不限于特定的命名空间。

角色名可以是最多64个字符的任何有效标识符。角色名称必须遵循标识符命名约定。角色名称可以包含Unicode字符。角色名称不区分大小写。如果选中了支持分隔标识符配置选项(默认设置),则角色名可以是用引号括起来的分隔标识符。如果是分隔标识符,则角色名可以是SQL保留字。它可以包含句点(.)、插入符号(^)和两个字符的箭头序列(->)。它不能包含逗号()或冒号()字符。它可以以除星号(*)以外的任何有效字符开头。

最初创建角色时,角色只是一个名称;它没有权限。要向角色添加权限,请使用GRANT命令。还可以使用GRANT命令为角色分配一个或多个角色。这允许创建角色层次结构。

如果调用CREATE ROLE来创建已经存在的角色,SQL会发出SQLCODE-118错误。可以通过调用$SYSTEM.SQL.Security.RoleExists()方法确定角色是否已存在:

  WRITE $SYSTEM.SQL.Security.RoleExists("%All"),!
  WRITE $SYSTEM.SQL.Security.RoleExists("Madmen")

如果指定的角色存在,则此方法返回1,如果该角色不存在,则返回0。角色名称不区分大小写。

要删除角色,请使用DROP ROLE命令。

权限

CREATE ROLE命令是特权操作。在嵌入式SQL中使用CREATE ROLE之前,需要以具有%Admin_Secure:USE权限的用户身份登录。否则将导致SQLCODE-99错误(特权冲突)。使用$SYSTEM.Security.Login()方法分配具有适当权限的用户:

   DO $SYSTEM.Security.Login(username,password)
   &sql(      )

必须具有%Service_Login:Use权限才能调用$SYSTEM.Security.Login()方法。

示例

以下示例尝试创建名为BkUser的角色。第一个示例中的用户“fred”没有创建角色权限。第二个示例中的用户“_system”确实拥有CREATE ROLE权限。

ClassMethod CreateRole()
{
    d $SYSTEM.Security.Login("yao","YaoPassword")
    &sql(
        CREATE ROLE BkUser
    )
    if SQLCODE = -99 {
        w !,"没有创建角色的权限" 
    } elseif SQLCODE = -118 {
        w !,"角色已经存在" 
    } else {
        w !,"创建了一个角色。错误代码是: ",SQLCODE 
    }
}

ClassMethod CreateRole1()
{
    d $SYSTEM.Security.Login("_SYSTEM","SYS")
Main
    &sql(
        CREATE ROLE BkUser
    )
    if SQLCODE = -99 {
        w !,"没有创建角色的权限" 
    } elseif SQLCODE = -118 {
        w !,"角色已经存在" 
    } else {
        w !,"创建了一个角色。错误代码是: ",SQLCODE 
    }
Cleanup
    s toggle = $RANDOM(2)
    if toggle = 0 { 
        &sql(
            DROP ROLE BkUser
        )
        w !,"删除角色错误代码: ",SQLCODE
    } else { 
        w !,"未删除"
        q 
    }
}
00
1 0 0 4
Log in or sign up to continue