每个 Vertica 数据库都有一个或多个用户。当用户连接至数据库时,他们必须使用超级用户在数据库中定义的有效凭证(用户名和密码)登录。
数据库用户拥有其在数据库中创建的表、过程和存储位置等对象。
每个 Vertica 数据库都有一个或多个用户。当用户连接至数据库时,他们必须使用超级用户在数据库中定义的有效凭证(用户名和密码)登录。
数据库用户拥有其在数据库中创建的表、过程和存储位置等对象。
在 Vertica 数据库中,共有三种类型的用户:
数据库管理员 (DBADMIN)
对象所有者
其他所有人 (PUBLIC)
安装时,新的 Vertica 数据库会自动包含具有 超级用户权限的用户。除非在安装期间显式命名,否则此用户被标识为 dbadmin
。此用户不能被删除,并且具有以下不可撤销的角色:
使用这些角色,dbadmin
用户可以执行所有数据库操作。此用户还可以创建其他具有管理权限的用户。
不要将 dbadmin
用户与 DBADMIN 角色的用户混淆。DBADMIN 角色是一组可以分配给一个或多个用户的权限。
Vertica 文档经常将 dbadmin
用户称为超级用户。此参考文档与 Linux 超级用户无关。
dbadmin
用户可以创建具有相同权限的其他用户:
创建用户:
=> CREATE USER DataBaseAdmin2; CREATE USER
向新用户 DataBaseAdmin2
授予相应角色:
=> GRANT dbduser, dbadmin, pseudosuperuser to DataBaseAdmin2;
GRANT ROLE
用户 DataBaseAdmin2
现在具有与授予给最初 dbadmin 用户相同的权限。
DataBaseAdmin2
使用 SET ROLE 启用已分配给您的角色:
=> \c - DataBaseAdmin2;
You are now connected to database "VMart" as user "DataBaseAdmin2". => SET ROLE dbadmin, dbduser, pseudosuperuser; SET ROLE
确认角色已启用:
=> SHOW ENABLED ROLES;
name | setting ------------------------------------------------- enabled roles | dbduser, dbadmin, pseudosuperuser
对象所有者是创建特定数据库对象并可以对该对象执行任何操作的用户。默认情况下,仅所有者(或 超级用户)可以对数据库对象执行操作。为了允许其他用户使用对象,所有者或超级用户必须使用其中一个 GRANT 语句向这些用户授予权限。
有关详细信息,请参阅数据库权限。
所有非 DBA(超级用户)或对象所有者都是 PUBLIC 用户。
新创建的用户默认没有 PUBLIC 架构的访问权。请确保对创建的所有用户运行 GRANT USAGE ON SCHEMA PUBLIC。
要创建数据库用户:
以超级用户身份从 vsql 连接至数据库。
发出
CREATE USER
语句及可选参数。
运行一系列 GRANT 语句,授予新用户权限。
要在 MC 上创建用户,请参阅在管理控制台中创建 MC 用户
默认情况下,新数据库用户有权在数据库中创建临时表。
新创建的用户默认没有 PUBLIC
架构的访问权。请确保对创建的所有用户运行 GRANT USAGE ON SCHEMA PUBLIC
可以使用
ALTER USER
语句更改用户相关信息,例如用户的密码。如果要将用户配置为不使用任何密码身份验证,可以在 CREATE USER
或 ALTER USER
语句中设置空密码 '',或在 CREATE USER
中忽略 IDENTIFIED BY
参数。
以下一系列命令将密码为“password”的用户 Fred 添加到数据库。第二个命令向 Fred 授予公共架构的 USAGE 权限:
=> CREATE USER Fred IDENTIFIED BY 'password';
=> GRANT USAGE ON SCHEMA PUBLIC to Fred;
使用双引号创建的用户名区分大小写。例如:
=> CREATE USER "FrEd1";
在上述示例中,登录名必须完全匹配。如果创建用户名时没有使用双引号(例如,FRED1
),则用户可以使用 FRED1
、FrEd1
、fred1
等登录。
ALTER USER 允许您为单个用户设置用户级别配置参数。这些设置会覆盖相同参数的数据库或会话级别设置。例如,以下 ALTER USER 语句将用户 Yvonne 和 Ahmed 的 DepotOperationsForQuery 设置为 FETCHES,从而覆盖默认设置 ALL:
=> SELECT user_name, parameter_name, current_value, default_value FROM user_configuration_parameters
WHERE user_name IN('Ahmed', 'Yvonne') AND parameter_name = 'DepotOperationsForQuery';
user_name | parameter_name | current_value | default_value
-----------+-------------------------+---------------+---------------
Ahmed | DepotOperationsForQuery | ALL | ALL
Yvonne | DepotOperationsForQuery | ALL | ALL
(2 rows)
=> ALTER USER Ahmed SET DepotOperationsForQuery='FETCHES';
ALTER USER
=> ALTER USER Yvonne SET DepotOperationsForQuery='FETCHES';
ALTER USER
若要标识用户级别配置参数,请查询系统表 CONFIGURATION_PARAMETERS 的 allowed_levels
列。例如,以下查询标识会影响存储库使用的用户级别参数:
n=> SELECT parameter_name, allowed_levels, default_value, current_level, current_value
FROM configuration_parameters WHERE allowed_levels ilike '%USER%' AND parameter_name ilike '%depot%';
parameter_name | allowed_levels | default_value | current_level | current_value
-------------------------+-------------------------+---------------+---------------+---------------
UseDepotForReads | SESSION, USER, DATABASE | 1 | DEFAULT | 1
DepotOperationsForQuery | SESSION, USER, DATABASE | ALL | DEFAULT | ALL
UseDepotForWrites | SESSION, USER, DATABASE | 1 | DEFAULT | 1
(3 rows)
可以用以下两种方式获取用户设置:
查询系统表 USER_CONFIGURATION_PARAMETERS:
=> SELECT * FROM user_configuration_parameters;
user_name | parameter_name | current_value | default_value
-----------+---------------------------+---------------+---------------
Ahmed | DepotOperationsForQuery | FETCHES | ALL
Yvonne | DepotOperationsForQuery | FETCHES | ALL
Yvonne | LoadSourceStatisticsLimit | 512 | 256
(3 rows)
使用 SHOW USER:
=> SHOW USER Yvonne PARAMETER ALL;
user | parameter | setting
--------+---------------------------+---------
Yvonne | DepotOperationsForQuery | FETCHES
Yvonne | LoadSourceStatisticsLimit | 512
(2 rows)
=> SHOW USER ALL PARAMETER ALL;
user | parameter | setting
--------+---------------------------+---------
Yvonne | DepotOperationsForQuery | FETCHES
Yvonne | LoadSourceStatisticsLimit | 512
Ahmed | DepotOperationsForQuery | FETCHES
(3 rows)
作为超级用户,您可以使用 ALTER USER...ACCOUNT LOCK 手动锁定数据库用户帐户,使用 ALTER USER...ACCOUNT UNLOCK 解锁数据库用户帐户。例如,下列命令将阻止用户 Fred 登录到数据库:
=> ALTER USER Fred ACCOUNT LOCK;
=> \c - Fred
FATAL 4974: The user account "Fred" is locked
HINT: Please contact the database administrator
以下示例解锁对 Fred 的用户帐户的访问权限:
=> ALTER USER Fred ACCOUNT UNLOCK;|
=> \c - Fred
You are now connected as user "Fred".
CREATE USER 可以指定锁定新帐户。与任何锁定的帐户一样,可以使用 ALTER USER...ACCOUNT UNLOCK 解锁它。
=> CREATE USER Bob ACCOUNT LOCK;
CREATE USER
用户的配置文件可以指定在登录尝试失败一定次数后锁定帐户。
作为超级用户,您可以在使用 CREATE USER 创建用户时或稍后使用 ALTER USER 设置任何用户的密码。非超级用户还可以使用 ALTER USER 更改自己的密码。有一个例外情况:使用 LDAPLink 服务添加到 Vertica 数据库的用户无法使用 ALTER USER 更改其密码。
如果您提供相关的 salt,您还可以为用户提供预先经过哈希处理的密码。salt 必须是十六进制字符串。此方法绕过密码复杂性要求。
要查看现有用户的密码哈希和 salt,请参阅 PASSWORDS 系统表。
更改用户的密码对其当前会话没有影响。
在以下示例中,使用密码“mypassword”创建用户“Bob”。
=> CREATE USER Bob IDENTIFIED BY 'mypassword';
CREATE USER
随后将密码更改为“Orca”。
=> ALTER USER Bob IDENTIFIED BY 'Orca' REPLACE 'mypassword';
ALTER USER
在以下示例中,使用预先经过哈希处理的密码和 salt 创建用户“Alice”。
=> CREATE USER Alice IDENTIFIED BY
'sha512e0299de83ecfaa0b6c9cbb1feabfbe0b3c82a1495875cd9ec1c4b09016f09b42c1'
SALT '465a4aec38a85d6ecea5a0ac8f2d36d8';
在管理控制台上,具有 ADMIN 或 IT 权限的用户可以重置用户的非 LDAP 密码:
登录管理控制台并导航至 MC 设置 (MC Settings) > 用户管理 (User management)。
单击选择要修改的用户,再单击编辑 (Edit)。
单击编辑密码 (Edit password),然后输入两次新密码。
单击确定 (OK),然后单击保存 (Save)。