SQL命令 CREATE ROLE
创建角色
大纲
代码语言:javascript复制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
之前,需要以具有�min_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
}
}
代码语言:javascript复制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
}
}