创建用户帐户。
大纲
代码语言:javascript复制CREATE USER user-name IDENTIFY BY password
CREATE USER user-name IDENTIFIED BY password
参数
-
user-name
- 要创建的用户的名称。名称是最多128
个字符的标识符。它可以包含Unicode
字母。用户名不区分大小写。 -
password
- 此用户的密码。密码必须至少为3
个字符,并且不能超过32
个字符。密码区分大小写。密码可以包含Unicode
字符。
描述
CREATE USER
命令使用指定的密码创建用户帐户。
用户名可以是最多160
个字符的任何有效标识符。用户名必须遵循标识符命名约定。用户名可以包含Unicode
字符。用户名不区分大小写。
作为分隔标识符指定的用户名可以是SQL
保留字,可以包含逗号(,
)、句号(.
)、插入符号(^
)和两个字符的箭头序列(->
)。
它可以以除星号(*
)以外的任何有效字符开头。
IDENTIFY BY
和IDENTIFIED BY
关键字是同义词。
密码可以是数字文字、标识符或带引号的字符串。数字文字或标识符不必用引号括起来。带引号的字符串通常用于在密码中包含空格;带引号的密码可以包含除引号字符本身之外的任何字符组合。数字文字只能由0
到9
字符组成。标识符必须以字母(大写或小写)或%(百分号)开头;后面可以是字母、数字或以下任何符号的任意组合:_
(下划线)。
密码区分大小写。密码长度必须至少为三个字符,且少于33
个字符。指定过长或过短的密码都会生成SQLCODE-400
错误,%msg
值为“Error#845:Password is not Match Length or Pattern Requirements
(错误#845:密码与长度或模式要求不匹配)”。
不能使用主机变量指定用户名或密码值。
创建用户不会创建任何角色,也不会向用户授予任何角色。相反,用户将被授予对其正在登录的数据库的权限,如果用户在命名空间中至少拥有一个SQL
权限,则将被授予对%SQL/Service
服务的使用权限。要为用户分配权限或角色,请使用GRANT
命令。要创建角色,请使用CREATE ROLE
命令。
如果调用CREATE USER
来创建已经存在的用户,SQL会发出SQLCODE-118
错误,并显示%msg
值“名为‘name’
的用户已存在”。可以通过调用$SYSTEM.SQL.Security.UserExists()
方法来确定用户是否已经存在:
WRITE $SYSTEM.SQL.Security.UserExists("Admin"),!
WRITE $SYSTEM.SQL.Security.UserExists("BertieWooster")
如果指定的用户存在,则此方法返回1,如果该用户不存在,则返回0
。用户名不区分大小写。
权限
CREATE USER
命令是特权操作。在嵌入式SQL
中使用CREATE USER
之前,必须以具有适当权限的用户身份登录。否则将导致SQLCODE-99
错误(特权冲突)。
使用$SYSTEM.Security.Login()
方法分配具有适当权限的用户:
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
&sql( /* SQL code here */ )
必须具有%Service_Login:Use
权限才能调用$SYSTEM.Security.Login
方法。
示例
下面的嵌入式SQL
示例创建名为“BillTest”
、密码为“Carl4SHK”
的新用户。(提供了$Random
切换,以便您可以重复执行此示例程序。)
ClassMethod CreateUser()
{
d $SYSTEM.Security.Login("_SYSTEM","SYS")
s x = $SYSTEM.SQL.UserExists("BillTest")
if x = 0 {
&sql(
CREATE USER BillTest IDENTIFY BY Carl4SHK
)
if SQLCODE '= 0 {
w "创建用户错误: ",SQLCODE,!
q
}
}
w "用户BillTest存在",!
s toggle = $RANDOM(2)
if toggle = 0 {
&sql(DROP USER BillTest)
if SQLCODE '= 0 {
w "创建用户错误: ",SQLCODE,!
q
}
} else {
w !,"没有创建。",!
}
w "用户BillTest存在? ", $SYSTEM.SQL.UserExists("BillTest"),!
q
}