SQL命令 CREATE USER

2022-04-18 16:30:21 浏览数 (1)

创建用户帐户。

大纲

代码语言: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 BYIDENTIFIED BY关键字是同义词。

密码可以是数字文字、标识符或带引号的字符串。数字文字或标识符不必用引号括起来。带引号的字符串通常用于在密码中包含空格;带引号的密码可以包含除引号字符本身之外的任何字符组合。数字文字只能由09字符组成。标识符必须以字母(大写或小写)或%(百分号)开头;后面可以是字母、数字或以下任何符号的任意组合:_(下划线)。

密码区分大小写。密码长度必须至少为三个字符,且少于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()方法来确定用户是否已经存在:

代码语言:javascript复制
  WRITE $SYSTEM.SQL.Security.UserExists("Admin"),!
  WRITE $SYSTEM.SQL.Security.UserExists("BertieWooster")

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

权限

CREATE USER命令是特权操作。在嵌入式SQL中使用CREATE USER之前,必须以具有适当权限的用户身份登录。否则将导致SQLCODE-99错误(特权冲突)。

使用$SYSTEM.Security.Login()方法分配具有适当权限的用户:

代码语言:javascript复制
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql( /* SQL code here */  )

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

示例

下面的嵌入式SQL示例创建名为“BillTest”、密码为“Carl4SHK”的新用户。(提供了$Random切换,以便您可以重复执行此示例程序。)

代码语言:javascript复制
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
}

0 人点赞