此页面为机器翻译。请阅读英文原文。 English

SQL Language Extension: CREATE/ALTER/CREATE_OR_ALTER/DROP USER

实现从常规数据库连接中管理用户的功能。

作者:

Alex Peshkoff [email protected]

语法为:

CREATE USER name [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER name [ USING PLUGIN name ];

其中 OPTIONS 是以下选项的列表:

- PASSWORD ‘password’

- FIRSTNAME ‘firstname’

- MIDDLENAME ‘middlename’

- LASTNAME ’lastname'

- ACTIVE

- INACTIVE

- USING PLUGIN name

每个 TAG 可以有以下两种形式之一:

name = ‘string value’

或:

DROP name

其中 NAME 是任何有效的 SQL 标识符。

描述:

使得可以通过 SQL 语言在安全数据库中添加、修改和删除用户。

Firebird 从 3.0 版本开始支持多个安全数据库。gsec 实用程序和 services API

不支持此功能,使用它们来管理用户已被弃用。

CREATE 和 DROP 子句仅对 SYSDBA(或安全数据库中被授予 RDB$ADMIN 角色的其他用户)可用。普通用户可以修改自己的密码、宽名称和标签。尝试修改

其他用户将会失败。同样,尝试使自己变为非活动或活动状态也会失败。为了避免每次输入自己的名字,提供了简化形式的 ALTER CURRENT USER。

在 ALTER USER 语句中,PASSWORD、FIRSTNAME、MIDDLENAME、LASTNAME、ACTIVE、INACTIVE 或 TAGS 中至少必须出现一项。另外,请注意创建新用户时必须包含 PASSWORD 子句。

PASSWORD 子句不言自明。FIRSTNAME、MIDDLENAME 和 LASTNAME 子句也是如此,但也可以用来存储关于用户的任何简短信息。INACTIVE/ACTIVE 子句用于禁用用户登录服务器而不将其从列表中删除,以及恢复该能力。USING PLUGIN 子句使得不仅可以与默认管理插件(firebird.conf 中 UserManager 参数中列出的第一个)配合使用,还可以与其他插件配合使用。gsec 实用程序和 services API 不支持多个用户管理插件–始终使用默认插件。

TAGS 是最终用户定义的属性列表。值的长度不应超过 255 字节。

为名称赋值会设置新标签或修改现有标签。要删除标签,请使用 DROP 选项。

为用户设置标签列表时,如果之前设置的标签当前未被提及,则会保留这些标签。

请注意–由已弃用的 gsec 输入的 UID/GID 在 SQL 接口中被视为标签。

要访问用户列表,请从虚拟表 SEC$USERS 和 SEC$USER_ATTRIBUTES 中选择。

示例(假设 firebird.conf 中 UserManager=Srp,Legacy_UserManager):

通用:

CREATE USER alex PASSWORD 'test'; ALTER USER alex SET FIRSTNAME 'Alex' LASTNAME 'Peshkoff'; CREATE OR ALTER USER alex SET PASSWORD 'IdQfA'; DROP USER alex; ALTER CURRENT USER SET PASSWORD 'SomethingLongEnough' USING PLUGIN srp;

使用标签:

ALTER USER alex SET TAGS (a='a', b='b'); NAME VALUE ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NAME VALUE ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NAME VALUE ================ ============================== B x C sample

显示用户列表:

SELECT CAST(U.SEC$USER_NAME AS CHAR(20)) LOGIN, CAST(A.SEC$KEY AS CHAR(10)) TAG, CAST(A.SEC$VALUE AS CHAR(20)) "VALUE", U.SEC$PLUGIN "PLUGIN" FROM SEC$USERS U LEFT JOIN SEC$USER_ATTRIBUTES A ON U.SEC$USER_NAME = A.SEC$USER_NAME AND U.SEC$PLUGIN = A.SEC$PLUGIN;

LOGIN TAG VALUE PLUGIN

==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager

注意!

此功能高度依赖于用户管理插件。请注意,使用旧版用户管理插件时,某些选项会被忽略。