数据库身份验证
Guacamole支持由MySQL、PostgreSQL或SQL Server数据库通过项目网站提供的可用扩展进行身份验证。使用数据库进行身份验证提供了附加的功能,如能够使用负载均衡连接组和基于Web的管理界面。与默认的XML驱动的身份验证模块不同,所有关于用户和连接的改变都会立即生效,用户不需要注销或重新登录即可看到新的连接。
虽然大多数身份验证扩展是独立运行的,但数据库身份验证可以充当从属角色,从而允许来自其他身份验证扩展的用户和用户组与数据库内的连接相关联。如果用户和组的名称相同,则认为它们与数据库中的用户和组相同,并且如果成功,则另一个扩展的身份验证结果将受信任。因此,在多个系统下拥有帐户的用户在成功登录后将能够看到来自每个系统的数据。有关与其他机制一起使用数据库身份验证的更多信息,请参阅在LDAP身份验证中将LDAP与数据库关联。
为了使用数据库身份验证扩展,你需要:
- 一个受支持的数据库,目前由MariaDB,MySQL,PostgreSQL或SQL Server。
- 有足够的权限来创建新数据库、创建新用户以及授予这些用户权限。
- 可从Guacamole服务器对数据库进行网络访问。
❗重点:
本章涉及修改GUACAMOLE_HOME(Guacamole配置目录)的内容。如果你不确定GUACAMOLE_HOME在你的系统中的位置,请在继续之前查看文档《配置Guacamole》。
下载数据库身份验证扩展
数据库身份验证扩展可以从主guacamole.war
中单独获取。在特定发行版的说明中都提供了数据库身份验证扩展以及所有其他官方支持且兼容的扩展的链接。你可以从此处找到当前版本Guacamole的发行说明:http://guacamole.apache.org/releases/
数据库身份验证扩展名打包为一个.tar.gz
文件,其中包含几个特定于数据库的目录。根据你使用的是MariaDB、MySQL、PostgreSQL还是SQL Server,归档中只有一个目录适用于您。
每个特定于数据库的目录都包含一个schema/
目录和一个.jar
文件(真正的Guacalmole扩展)。Guacamole扩展.jar
最终需要放在GUACAMOLE_HOME/extensions
目录下,而JDBC驱动必须单独从数据库供应商处下载并放在GUACAMOLE_HOME/lib
目录下。
MySQL
- Guacamole扩展
mysql/guacamole-auth-jdbc-mysql-1.4.0.jar
- SQL纲要脚本
mysql/schema/
- JDBC驱动
支持以下任何与MySQL兼容的JDBC驱动程序将Guacamole与MySQL或MariaDB连接:
如果使用的是MySQL中的JDBC驱动,则所需的.jar
文件将位于一个.tar.gz
归档文件中。
PostgreSQL
- Guacamole扩展
postgresql/guacamole-auth-jdbc-postgresql-1.4.0.jar
- SQL纲要脚本
postgresql/schema/
- JDBC驱动
PostgreSQL JDBC Driver
SQL Server
- Guacamole扩展
sqlserver/guacamole-auth-jdbc-sqlserver-1.4.0.jar
- SQL纲要脚本
sqlserver/schema/
- JDBC驱动
支持以下任何与TDS兼容的JDBC驱动将Guacamole和SQL Server连接:
- Microsoft JDBC Driver for SQL Server
- jTDS
- Progress DataDirect’s JDBC Driver for SQL Server
- Microsoft SQL Server 2000 JDBC Driver (legacy)
创建Guacamole数据库
数据库身份验证模块需要一个数据库来存储身份验证数据以及需要一个用户只用于数据访问和操作。你可以使用现有数据库和现有用户,但为了简单和安全起见,这些说明假定你将创建一个新数据库和新用户,该数据库和新用户将仅被Guacamole使用,并且仅用于此身份验证模块。
你需要安装MariaDB、MySQL、PostgreSQL或SQL Server,并且必须具有足够的权限来创建和管理数据库。如果不是这样,请立即安装你选择的数据库。大多数发行版将提供一个方便的MySQL或PostgreSQL软件包,它将为你设置所有内容,包括根数据库用户(如果适用)。如果你使用的是SQL Server,则需要在你选择的平台上安装软件包,并确保获取了所运行的SQL Server版本和版本的正当许可。
为了清楚起见,这些说明将数据库称为guacamole_db
,但数据库可以随意命名。
MySQL
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 233
Server version: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE guacamole_db;
Query OK, 1 row affected (0.00 sec)
mysql> quit
Bye
$ ls schema/
001-create-schema.sql 002-create-admin-user.sql upgrade
$ cat schema/*.sql | mysql -u root -p guacamole_db
Enter password:
$
PostgreSQL
$ createdb guacamole_db
$ ls schema/
001-create-schema.sql 002-create-admin-user.sql
$ cat schema/*.sql | psql -d guacamole_db -f -
CREATE TYPE
CREATE TYPE
CREATE TYPE
CREATE TABLE
CREATE INDEX
...
INSERT 0 1
INSERT 0 4
INSERT 0 3
$
SQL Server
$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA
Password:
1> CREATE DATABASE guacamole_db;
2> GO
1> quit
$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d guacamole_db -i schema/001-create-schema.sql
Password:
Rule bound to data type.
The new rule has been bound to column(s) of the specified user data type.
Rule bound to data type.
The new rule has been bound to column(s) of the specified user data type.
$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d guacamole_db -i schema/002-create-admin-user.sql
Password:
(1 rows affected)
(3 rows affected)
(5 rows affected)
$
授予Guacamole对数据库的访问权限
为了让Guacamole能够对数据库执行查询,必须为数据库创建一个新用户,并授予该用户足够的权限来管理数据库中所有表的内容。为Guacamole创建的用户只需对所有Guacamole表拥有SELECT
、UPDATE
、INSERT
和DELETE
权限。此外,如果使用PostgreSQL,用户需要对所有Guacamole表格中的所有序列拥有SELECT
和USAGE
权限。不应授予其他权限。
这些说明将用户称为guacamole_user
,但用户可以随意命名。当然,你也应该为你的用户选择一个真实的密码,而不是下面用作占位符的字符串some_password
。
MySQL
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 233
Server version: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'some_password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
mysql> quit
Bye
$
PostgreSQL
$ psql -d guacamole_db
psql (9.3.6)
Type "help" for help.
guacamole=# CREATE USER guacamole_user WITH PASSWORD 'some_password';
CREATE ROLE
guacamole=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user;
GRANT
guacamole=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user;
GRANT
guacamole=# \q
$
SQL Server
$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA
Password:
1> CREATE LOGIN guacamole_user WITH PASSWORD = 'some_password';
2> GO
1> USE guacamole_db;
2> GO
1> CREATE USER guacamole_user;
2> GO
1> ALTER ROLE db_datawriter ADD MEMBER guacamole_user;
2> ALTER ROLE db_datareader ADD MEMBER guacamole_user;
3> GO
1> quit
$
升级现有的Guacamole数据库
如果要从旧版本的Guacamole升级,可能需要运行schema/upgrade/目录中的一个或多个数据库纲要升级脚本。这些脚本中的每一个都被命名为upgrade-pre-
VERSION
.sql
,其中VERSION
是引入这些变更的Guacamole的版本。当你从比VERSION
版本更旧的Guacamole升级时,需要运行它们。
这些脚本是增量的,如果相关,必须按照顺序执行。例如,如果你将一个现有数据库从版本0.9.13- incubating
升级到1.0.0
版本,你将需要先运行upgrade-pre-0.9.14.sql
脚本(因为0.9.13-incubating
比0.9.14
旧),接着在运行upgrade-pre-1.0.0.sql
脚本(因为0.9.13-incubating
也比1.0.0
旧)。
❗重点:
由于首次创建数据库时授予特定于Guacamole的PostgreSQL用户的权限不会自动授予任何新表和序列,因此在应用任何升级相关脚本后,仍需要重新授予这些权限:
$ psql -d guacamole_db
psql (9.3.6)
Type "help" for help.
guacamole=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user;
GRANT
guacamole=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user;
GRANT
guacamole=# \q
$
安装数据库身份验证
Guacamole扩展是自包含的.jar
文件,位于GUACAMOLE_HOME/extensions
目录中。要安装数据库身份验证扩展,必须:
- 创建
GUACAMOLE_HOME/extensions
和GUACAMOLE_HOME/lib
目录(如果不存在)。 - 根据你使用的是
MySQL
、MariaDB
、PostgreSQL
或是SQL Server
,从GUACAMOLE_HOME/extensions
目录中拷贝guacamole-auth-jdbc-mysql-1.4.0.jar
或guacamole-auth-jdbc-postgresql-1.4.0.jar
或guacamole-auth-jdbc-sqlserver-1.4.0.jar
。 - 拷贝你的数据库的JDBC驱动到
GUACAMOLE_HOME/lib
目录。没有数据库的JDBC驱动,Guacamole将无法连接并验证其用户身份。 - 将Guacamole配置为使用数据库身份验证,如下所述。
❗重点:
为了完成安装,需要通过重启servlet容器来重启Guacamole。这样做将断开所有活跃用户的连接,因此请确保在尝试安装之前这样做是安全的。如果未正确配置数据库身份验证,则在修复配置之前,Guacamole不会再次启动。
配置Guacamole使用数据库身份验证
要使Guacamole正确地连接到你的数据库,必须向guacamole.properties
中添加额外的属性。这些属性特定于所使用的数据库,必须正确设置才能进行身份验证。
数据库身份验证扩展绝对需要的属性相对较少且不言自明,仅描述如何建立与数据库的连接,以及Guacamole在查询数据库时将如何进行身份验证:
- MySQL
参数 | 说明 |
| 托管你的数据库的服务器的主机名或IP地址。 |
| 为Guacamole创建的数据库名称。本章节的示例将其命名为 |
| Guacamole用于连接数据库的用户的用户名。本章节的示例将其命名为 |
| 验证数据库时Guacamole应该提供的密码。本章节的示例用 |
连接一个本地托管的MySQL数据库的最小化guacamole.properties
配置文件如下:
# MySQL properties
mysql-hostname: localhost
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password
- PostgreSQL
参数 | 说明 |
| 托管你的数据库的服务器的主机名或IP地址。 |
| 为Guacamole创建的数据库名称。本章节的示例将其命名为 |
| Guacamole用于连接数据库的用户的用户名。本章节的示例将其命名为 |
| 验证数据库时Guacamole应该提供的密码。本章节的示例用 |
连接一个本地托管的PostgreSQL数据库的最小化guacamole.properties
配置文件如下:
# PostgreSQL properties
postgresql-hostname: localhost
postgresql-database: guacamole_db
postgresql-username: guacamole_user
postgresql-password: some_password
- SQL Server
参数 | 说明 |
| 托管你的数据库的服务器的主机名或IP地址。 |
| 为Guacamole创建的数据库名称。本章节的示例将其命名为 |
| Guacamole用于连接数据库的用户的用户名。本章节的示例将其命名为 |
| 验证数据库时Guacamole应该提供的密码。本章节的示例用 |
连接一个本地托管的SQL Server数据库的最小化guacamole.properties
配置文件如下:
# SQL Server properties
sqlserver-hostname: localhost
sqlserver-database: guacamole_db
sqlserver-username: guacamole_user
sqlserver-password: some_password
❗重点:
确保为你创建的数据库用户指定正确的用户名和密码,并指定正确的数据库。如果这些参数不正确,身份验证将不起作用。
其他可选属性可用于控制Guacamole如何连接到数据库服务器:
- MySQL
mysql-port
连接MySQL或MariaDB数据库的端口号。如果没有指定,则使用标准端口3306。mysql-driver
控制扩展尝试加载的哪个JDBC驱动程序。默认情况下,将自动检测已安装的JDBC驱动程序。可能的值包括:
- mysql
MySQL Connector/J JDBC驱动。 - mariadb
MariaDB Connector/J JDBC驱动.
mysql-server-timezone
指定MySQL服务器配置的运行时区。虽然MySQL驱动程序尝试自动检测服务器使用的时区,但在许多情况下,操作系统提供的时区要么Java未知,要么与多个时区匹配。在这些情况下,MySQL可能会报错或拒绝连接,除非将时区指定为连接的一部分。此属性允许指定服务器的时区,以便连接可以继续,并且 JDBC 驱动程序可以正确转换时间戳。该属性接受以下格式的时区:
- Region/Locale
Region/Locale格式的已知时区标识符。例如:
mysql-server-timezone: America/Los_Angeles
mysql-server-timezone: Africa/Johannesburg
mysql-server-timezone: China/Shanghai
- GMT+/-HH:MM
GMT或由GMT偏移量指定的自定义时区。有效的GMT规范示例如下:
mysql-server-timezone: GMT
mysql-server-timezone: GMT-00:00
mysql-server-timezone: GMT+0000
mysql-server-timezone: GMT-0
GMT偏移量指定的自定义时区示例如下:
mysql-server-timezone: GMT+0130
mysql-server-timezone: GMT-0430
mysql-server-timezone: GMT+06:00
mysql-server-timezone: GMT-9
MySQL驱动程序实现了几个特定于配置SSL的参数,以便安全连接到支持或需要加密通信的MySQL服务器。MySQL Connector/J
的旧版本在SSL验证方面存在已知问题,如果你在连接到受SSL保护的MySQL数据库时遇到问题,建议你更新到当前版本的驱动程序。
mysql-ssl-mode
这些属性设置JDBC驱动与远程MySQL服务器通信时尝试使用的SSL模式。该属性的值与MySQL和MariaDB JDBC驱动支持的标准值匹配:
- disabled
不要使用 SSL,如果服务器需要,则失败。为了兼容,这还会将旧版 JDBC 驱动程序属性useSSL
设置为false
。 - preferred
首选 SSL,但如果无法协商 SSL 连接,则回退到纯文本。这是默认设置。 - required
需要 SSL 连接,如果无法协商 SSL,则失败。此模式不对服务器、颁发者等使用的证书执行任何验证检查。 - verify-ca
需要 SSL 连接,并检查以确保已知证书颁发者有效。 - verify-identity
需要 SSL 连接,并检查以确保服务器证书是由已知颁发机构颁发的,并且服务器的身份与证书上的身份匹配。
mysql-ssl-trust-store
将存储 JDBC 驱动程序在验证 CA 和服务器证书时要使用的受信任 SSL 证书的文件。这应该是 JKS 格式的证书存储。此属性是可选的,默认为 Java 的一般受信任证书位置,这些位置因所使用的 Java 版本而异。mysql-ssl-trust-password
用于访问 SSL 受信任证书存储的密码(如果需要)。默认情况下,将不使用任何密码。mysql-ssl-client-store
包含与MySQL服务器建立SSL连接时要使用的客户端证书的文件。这应该是包含私钥和证书对的 JKS 格式的证书存储。此属性是可选的,默认情况下,不会将任何客户端证书用于 SSL 连接。mysql-ssl-client-password
用于访问客户端证书存储的密码(如果需要)。默认情况下,将不使用任何密码。
- PostgreSQL
- postgresql-port
要连接到的 PostgreSQL 数据库的端口号。如果未指定,将使用标准的 PostgreSQL 端口 5432。 - postgresql-ssl-mode
此属性设置 JDBC 扩展在与远程 Postgres 服务器通信时将尝试使用的 SSL 模式。此属性的值与 Postgres JDBC 驱动程序支持的标准值匹配:
- disable
不使用SSL,且如果服务器需要,则失败。 - allow
如果服务器需要加密,请使用它,否则首选未加密的连接。 - prefer
首先尝试 SSL 连接,但如果服务器不支持 SSL 或 SSL 协商失败,则允许使用未加密的连接。这是默认设置。 - require
需要 SSL 连接,但隐式信任所有服务器证书和颁发机构。 - require
需要 SSL 连接,并验证服务器证书是否由已知证书颁发机构颁发。 - verify-full
需要 SSL 连接,验证服务器证书是否由已知颁发机构颁发,以及证书上的名称是否与服务器的名称匹配。
- postgresql-ssl-cert-file
包含与 Postgres 服务器建立 SSL 加密连接时要使用的客户端证书的文件,采用 PEM 格式。此属性是可选的,如果 SSL 模式设置为禁用,则将忽略此属性。 - postgresql-ssl-key-file
包含与 Postgres 服务器建立 SSL 加密连接时要使用的客户端私钥的文件,采用 PEM 格式。此属性是可选的,如果 SSL 模式设置为禁用,则将忽略此属性。 - postgresql-ssl-root-cert-file
包含根证书和中间证书的文件,在与 Postgres 服务器建立 SSL 加密连接时,将根据这些证书验证服务器证书。此文件应包含一个或多个 PEM 格式的颁发机构证书。此属性是可选的,仅当 SSL 模式设置为verify-ca
或verify-full
时才使用。
如果SSL设置为其中一种验证模式,且未指定此属性,JDBC驱动程序将尝试使用运行web应用程序服务器(例如Tomcat)的用户的主目录中的.postgresql/root.crt
文件。如果未指定此属性且默认文件不存在,Postgres JDBC驱动程序将无法连接到服务器。 - postgresql-ssl-key-password
用于访问客户端私钥文件的密码(如果客户端私钥已加密)。此属性是可选的,仅当设置了postgresql-ssl-key-file
属性且启用了SSL时才使用。 - postgresql-default-statement-timeout
驱动程序在中止查询之前等待数据库响应的秒数。值为0(默认值)表示禁用超时。 - postgresql-socket-timeout
等待套接字读取操作的秒数。如果从服务器读取数据的时间超过此值,则连接会被关闭。这0可用于处理网络问题,例如与数据库的连接断开。与postgresql-default-statement-timeout
类似,也会中止耗时过长的查询。值为0(默认值)表示禁用超时。
- SQL Server
- sqlserver-port
要连接到的 SQL Server 数据库的端口号。如果未指定,则将使用标准 SQL Server 端口 1433。 - sqlserver-driver
预期已安装与TDS兼容的特定JDBC驱动程序。有多个支持SQL Server的JDBC驱动程序可用。如果不使用Microsoft驱动程序,则必须指定此属性以定义将使用的驱动程序。可能的值包括:
- microsoft2005
当前的 Microsoft的SQL Server JDBC驱动 ,支持 SQL Server 2005 及更高版本。这是默认设置。 - microsoft
SQL Server 2000 的旧版 Microsoft 驱动程序。 - jtds
开源 jTDS 驱动程序。 - datadirect
Progress DataDirect的SQL Server JDBC驱动。
- sqlserver-instance
SQL Server 驱动程序应尝试连接到的实例名称(如果不是默认 SQL Server 实例)。此实例名称是在 SQL Server 安装过程中配置的。此属性是可选的,大多数安装应该无需指定实例名称即可工作。
强制实施密码策略
配置选项可用于强制实施旨在支持密码复杂性和定期更改密码的规则。默认情况下,这些选项均未启用,但可以通过 guacamole.properties
中的其他属性有选择地启用。
密码复杂性
管理员可以要求密码具有一定程度的复杂性,例如同时具有大写和小写字母(“多大小写”),至少一个数字或至少一个符号,并且可以禁止密码包含用户自己的用户名。
关于密码内容,数据库身份验证将"数字"定义为任何数字字符,将"符号"定义为任何非字母数字字符。这考虑了非英语语言,因此数字不是简单的"0"到"9",而是Unicode中定义为数字的任何字符,而符号是Unicode未定义为字母或数字的任何字符。
检查密码是否包含用户自己的用户名时不区分大小写。例如,如果用户的用户名是“phil”,则密码“ch!0roPhil”和“PHIL-o-dendr0n”仍将被禁止。
- MySQL
mysql-user-password-min-length: 8
mysql-user-password-require-multiple-case: true
mysql-user-password-require-symbol: true
mysql-user-password-require-digit: true
mysql-user-password-prohibit-username: true
- PostgreSQL
postgresql-user-password-min-length: 8
postgresql-user-password-require-multiple-case: true
postgresql-user-password-require-symbol: true
postgresql-user-password-require-digit: true
postgresql-user-password-prohibit-username: true
- SQL Server
sqlserver-user-password-min-length: 8
sqlserver-user-password-require-multiple-case: true
sqlserver-user-password-require-symbol: true
sqlserver-user-password-require-digit: true
sqlserver-user-password-prohibit-username: true
密码期限/到期时间
“密码期限”指的是两个不同的概念:
- 要求用户在自上次更改密码(最长密码期限)以来经过一段时间后更改其密码。
- 防止用户过于频繁地更改其密码(最短密码期限)。
虽然防止用户过于频繁地更改其密码似乎很奇怪,但如果你担心快速更改密码可能会破坏密码过期(用户可以立即更改密码)或跟踪密码历史记录(用户可以循环浏览密码,直到历史记录用尽并且他们的旧密码再次可用),这确实是有道理的。
默认情况下,数据库身份验证不会对密码期限施加任何限制,并且有权更改其密码的用户可以根据需要频繁或不频繁地更改密码。可以使用一对属性启用密码期限限制,每个属性接受以天为单位给出的值:
- MySQL
mysql-user-password-min-age: 7
mysql-user-password-max-age: 90
- PostgreSQL
postgresql-user-password-min-age: 7
postgresql-user-password-max-age: 90
- SQL Server
sqlserver-user-password-min-age: 7
sqlserver-user-password-max-age: 90
❗重点:
最小期限限制不适用于任何有权管理系统的用户,以便管理员可以随时干预尽管有限制仍需要重置密码的情况。
防止密码重复使用
如果需要,Guacamole可以跟踪每个用户最近使用的密码,并禁止重复使用这些密码,直到密码被多次更改。默认情况下,Guacamole不会跟踪旧密码。
请注意,这些密码的散列方式与每个用户的当前密码相同。当用户的密码发生更改时,当前为该用户存储的hash、salt等实际上只是逐字复制(连同时间戳)到历史密码列表中,该列表中的旧条目将被自动删除。
- MySQL
mysql-user-password-history-size: 6
- PostgreSQL
postgresql-user-password-history-size: 6
- SQL Server
sqlserver-user-password-history-size: 6
并发使用Guacamole连接
数据库身份验证模块提供了配置选项来限制连接或连接组的并发使用。 这些选项通过guacamole.properties
设置并指定连接和连接组的默认并发策略。 通过属性设置的值可以在以后使用管理界面在每个连接的基础上进行重写:
- MySQL
mysql-default-max-connections: 1
mysql-default-max-group-connections: 1
- PostgreSQL
postgresql-default-max-connections: 1
postgresql-default-max-group-connections: 1
- SQL Server
sqlserver-default-max-connections: 1
sqlserver-default-max-group-connections: 1
这些属性不是必需的,但是如果具有上述属性,则尝试使用已在使用的连接或组的用户将被拒绝访问。默认情况下,允许并发访问。
还可以限制并发访问,以便特定用户只能使用一个连接或组一定次数。默认情况下,每用户并发使用仅限于连接组(以避免允许单个用户耗尽组的内容),但在其他方面不受限制。可以通过guacamole.properties
或管理界面中公开的每个连接设置来修改此默认行为:
- MySQL
mysql-default-max-connections-per-user: 0
mysql-default-max-group-connections-per-user: 0
- PostgreSQL
postgresql-default-max-connections-per-user: 0
postgresql-default-max-group-connections-per-user: 0
- SQL Server
sqlserver-default-max-connections-per-user: 0
sqlserver-default-max-group-connections-per-user: 0
如果你希望对可以通过Guacamole建立的连接数量施加绝对限制,而忽略涉及哪些用户或连接,也可以这样做。默认情况下,Guacamole不会施加这样的限制:
- MySQL
mysql-absolute-max-connections: 0
- PostgreSQL
postgresql-absolute-max-connections: 0
- SQL Server
sqlserver-absolute-max-connections: 0
将身份验证仅限于数据库用户
默认情况下,只要用户通过至少一个扩展进行身份验证,就可以访问Guacamole。如果正在使用数据库身份验证,并且某个用户未与数据库关联,则当另一个扩展授予此访问权限时,将允许该用户访问 Guacamole,并且将向该用户提供该用户帐户的其他扩展公开的数据视图。
在某些情况下,例如,在将 LDAP 与数据库结合使用时,最好让数据库对是否应允许用户进入系统拥有最终决定权:将访问权限限制为仅数据库中存在的那些用户,并通过所有其他方式显式拒绝身份验证,除非该用户也与数据库相关联。可以通过设置声明需要数据库用户帐户的属性来强制此行为:
- MySQL
mysql-user-required: true
- PostgreSQL
postgresql-user-required: true
- SQL Server
sqlserver-user-required: true
设置上述属性后,未与数据库关联的用户的有效身份验证尝试将被数据库身份验证否决。Guacamole将报告登录无效,就好像用户根本不存在一样。
自动创建数据库用户
Guacamole 支持将身份验证模块层叠在一起的功能,以便从一个扩展(例如 LDAP)成功进行身份验证的用户可以被分配权限给另一个扩展(例如 JDBC)中的连接。其他扩展(如 TOTP 扩展)依赖于数据库扩展来存储各种用户帐户的信息。在这些情况下,可能很难在数据库扩展中手动创建用户帐户。
数据库扩展提供了一种启用自动创建已经从其他扩展身份验证成功的用户账户的机制。默认情况下该功能是禁用的,但可以通过在guacamole.properties
中启用相应选项来启用每个受支持的数据库扩展的该功能。在管理员明确授予附加权限或通过分配附加权限给用户所在组之前,生成的账户将只对自身有READ
权限。
- MySQL
mysql-auto-create-accounts: true
- PostgreSQL
postgresql-auto-create-accounts: true
- SQL Server
sqlserver-auto-create-accounts: true
完成安装
Guacamole只在启动期间重读guacamole.properties
和加载新安装的扩展。因此在数据库身份验证产生影响前你需要重启你的servlet容器。重启你的servlet容器并尝试新的身份验证机制。
❗重点:
你仅需要重启你的servlet容器。不需要重启guacd。
guacd完全独立于Web应用程序,且不处理`guacamole.propertites`或任何身份验证系统。因此从技术上来说你已经在重启servlet容器,重启guacd将不会产生任何不良影响,但这么做完全没有意义。
如果Guacamole在重启servlet容器后没有恢复在线,请检查日志。数据库身份验证扩展配置中的问题将组织Guacamole启动,任何此类错误都将被记录在servlet容器的日志中。
登录
Guacamole提供的SQL脚本创建的默认用户是guacadmin
,密码为guacdmin
。验证数据库身份验证是否有效后,应立即更改密码。
关于管理用户和连接的更多详细介绍被提供在管理章节。
手动修改数据
如有必要,可以通过对数据库执行SQL语句来手动修改支持身份验证模块的数据。在一般情况下,这并不常见,但如果需要批量插入大量用户或连接,或者希望自动转换现有配置,则需要知道如何在较高层次上布局所有内容。
本节假设你了解SQL和你选择的数据库,并且只要你有关于Guacamole的SQL的架构信息,就可以完成你需要做的任何事情。
实体
每个用户和用户组在guacamole_entity
表中都有一个对应的条目,该条目作为分配唯一名称、权限以及用户和组共同关系(如组成员资格)的基础。每个实体都有一个对应的名称,该名称在相同类型的所有其他实体中是唯一的。
如果删除一个用户或用户组,相关的实体也应该被删除。对于通过级联(CASCAD)删除模式删除的实体将自动删除指向实体的所有用户或用户组,因此建议使用实体作为任何删除操作的基础。
guacamole_entity
表包含下面的列:
- entity_id
与每个实体(用户或用户组)关联的唯一整数。该值在guacamole_entity
表插入新的实体时自动生成,且不同于guacamole_user 中的用户实体或 guacamole_user_group中的用户组实体关联的唯一整数 - name
与每个用户或组关联的唯一名称。该值必须手动指定,且必须不同于表中已经存在的用户或组。该名称只需要相对于具有相同类型的其他实体的名称(用户可能与组具有相同的名称)唯一。 - type
实体的类型。可以是USER
或USER_GROUP
。
用户
每个用户都在guacamole_user
和guacamole_entity
表中有一个相关的条目。每个用户都有一个相关的唯一用户名,通过guacamole_entity
指定,且加盐密码。该加盐密码分为两列:一列包含salt,另一列包含用SHA-256
散列的密码。
如果删除用户,相关的实体也需要被删除。任何指向条目的用户都将在条目被以级联删除模式删除时被自动的删除,因此建议使用实体作为任意删除操作的基础。
guacamole_user
表包含以下列:
- user_id
与每个用户关联的唯一整数。将新条目插入guacamole_user
表时,会自动生成此值。 - entity_id
代表该用户的guacamole_entity
条目的entity_id
列的值。 - password_hash
使用SHA-256
对用户的密码与password_salt
内容进行哈希串联的结果。在哈希之前,将盐加载密码中。
虽然通过Guacamole设置的密码总是经过加盐的,但当手动或通过外部系统插入时,可以使用未经加盐的密码哈希。如果password_salt
是NULL
,password_hash
将被处理为简单的未经hash处理的密码。 - password_salt
一个 32 字节的随机值。从 Web 界面创建新用户时,将使用加密安全随机数生成器随机生成此值。
这将始终为通过Guacamole设置密码的用户设置,但是在手动或通过外部系统插入时可以使用无盐密码哈希。如果password_salt
为NULL
,password_hash
将被处理为简单的未经hash处理的密码。 - password_date
密码最后修改的日期和事件。当密码通过Guacamole界面修改时将会更新该值。这与guacamole_user_password_history
表的内容一起,用于强制密码策略。 - disabled
是否拒绝此用户账户的登录尝试。如果此列设置为TRUE
或1
,则此用户的登录尝试将被拒绝,就像该用户不存在一样。默认情况下,不会禁用用户帐户,如果用户提供正确的密码,登录尝试将成功。 - expired
如果设置为TRUE
或1
,则要求用户在完全登录之前重置密码。用户将收到一份密码重置表单,在密码更改之前,不允许用户登录Guacamole。默认情况下,用户帐户不会过期,登录时不需要重置密码。 - access_window_start
一天中可以使用此用户帐户的时间(不是日期)。如果为NULL
,则此限制不适用。如果设置为非空,则允许在指定时间之后尝试登录,而在指定时间之前尝试登录将被拒绝。 - access_window_end
一天中的时间(不是日期),在此时间之后,此用户帐户可能无法使用。如果为NULL
,则此限制不适用。如果设置为非空,则在指定时间之后尝试登录将被拒绝,而在指定时间之前尝试登录将被允许。 - valid_from
在此日期之后可以使用此用户帐户的日期(不是一天中的时间)。如果为NULL
,则此限制不适用。如果设置为非空,则允许尝试在指定日期之后登录,而尝试在指定日期之前登录将被拒绝。 - valid_until
在此日期(不是一天中的时间)之后,此用户帐户不得使用。如果为NULL
,则此限制不适用。如果设置为非空,则在指定日期之后登录的尝试将被拒绝,同时将允许尝试在指定日期之前登录。 - timezone
诠释access_window_start
、access_window_end
、valid_from
和valid_until
值时使用的时区。该值可以是getAvailableIDs()
定义的任何JavaTimeZone
的ID,尽管Guacamole管理界面将只显示这些时区的一个子集。 - full_name
用户的全称。与用户名不同,该名称不必唯一。它是可选的且仅用于显示目的。定义此值与用户标识无关,用户标识完全由用户名决定。没有关联全称的用户账户应将此列设置为NULL
。 - email_address
用户的邮箱地址,如果有的话。该值是可选的,不必相对于与其他定义的用户唯一,且仅用于显示目的。定义这个值与用户标识无关,用户标识完全由用户名决定。如果用户没有关联的邮箱地址,则此列应设置为NULL
。 - organization
用户所属组织、公司等的名称。该值是可选的且仅用于显示目的。定义该值于用户标识无关,用户标识仅由用户名决定。没有附属组织的用户应将该列的值设置为NULL
。 - organizational_role
organization
列描述的组织中用户的角色或头衔。此值是可选的,仅用于显示目的。定义这个值与用户标识无关,用户标识完全由用户名决定。没有关联组织(或该组织的特定角色/头衔)的用户应将此列设置为NULL
。
❗重点:
如果您选择手动设置未加盐密码哈希,请确保你理解这样做的安全含义。
如果你的数据库遭到破坏,那么查找加盐哈希的密码在算法上是不可行的,且查找无盐哈希的密码通常也是不可行的。在许多情况下,只需将哈希输入谷歌等搜索引擎,就可以找到与无盐哈希值对应的密码。
对于手动创建用户,主要的复杂性便是salt,在构造INSERT
语句之前必须确定salt,但这可以使用变量来处理。对于MySQL:
-- Generate salt
SET @salt = UNHEX(SHA2(UUID(), 256));
-- Create base entity entry for user
INSERT INTO guacamole_entity (name, type)
VALUES ('myuser', 'USER');
-- Create user and hash password with salt
INSERT INTO guacamole_user (
entity_id,
password_salt,
password_hash,
password_date
)
SELECT
entity_id,
@salt,
UNHEX(SHA2(CONCAT('mypassword', HEX(@salt)), 256)),
CURRENT_TIMESTAMP
FROM guacamole_entity
WHERE
name = 'myuser'
AND type = 'USER';
类似这种声明对于创建新用户或更改密码都很有用,尤其是在所有管理员都忘记了密码的情况下。
如果你使用的不是MySQL或你的MySQL版本缺少SHA2
函数,你将需要手动计算SHA-256
值(例如,通过使用sha256sum
命令)。
密码历史记录
当一个用户的额密码被修改时,将在guacamole_user_password_history
表中创建一份之前密码的哈希和加盐的副本。此表中的每个条目都与密码更改的用户以及首次应用密码的日期相关联。
此表中的旧条目将基于每个用户自动删除,具体取决于密码策略的要求。例如,如果密码策略已配置为要求用户不要重复使用其之前的六个密码中的任何一个,则此表中每个用户的条目将不超过六个。
- password_history_id
与每条密码历史记录关联的唯一整数值。该值在guacamole_user_password_history
表插入新条目时自动生成。 - user_id
之前具有这条密码的guacamole_user
表中的用户的user_id
列的值。 - password_hash
密码修改前在guacamole_user
表的password_hash
列中指定的哈希密码。
多数情况下,这是加盐哈希值,尽管在手动或通过扩展系统更改数据库时可能使用无盐哈希值。 - password_salt
密码修改前在guacamole_user
表的password_salt
列中指定的加盐值。
通过Guacamole设置密码的用户将总是被设置该值,但当手动或通过扩展系统插入时可能使用无盐哈希密码,这种情况下该列的值可能是NULL
。 - password_date
设置密码的日期和时间。密码停止使用的时间由guacamole_user_password_history
中下一条相关条目的password_date
或guacamole_user
中的相关条目的password_date
记录(如果密码历史记录表中没有相关历史条目)。
登录历史记录
当用户登录或注销时,将分别创建或更新guacamole_user_history
表中的相应条目。每个条目都与登录的用户及其会话开始的时间相关联。如果用户已注销,也会存储其会话结束的时间。
用户不太可能需要更新此表,但如果希望生成Guacamole使用情况报告,了解该表的结构可能很有用。guacamole_user_history
表有以下列:
- history_id
与每条历史记录相关的唯一整数。该值在guacamole_user_history
表插入新的条目时自动生成。 - user_id
与登录用户关联的guacamole_user
表中的条目的user_id
的值。如果用户不存在,则值为NULL
。 - username
登录时与用户关联的用户名。此用户名值不保证唯一标识用户,因为原始用户可能会被重命名或删除。 - remote_host
用户从中登录的机器的主机名或IP地址,如果知道的话。如果不知道,该值将被设置为NULL
。 - start_date
用户登录的时间。尽管其名称是日期,但除了日期之外,此列还存储时间信息。 - end_date
用户注销登录的时间。如果用户仍然在线,这一列的值将为NULL
。尽管其名称是日期,但除了日期之外,此列还存储时间信息。
用户组
与用户类似,每个用户组在guacamole_user_group
和guacamole_entity
表中都有一条相关的条目。每个用户组都通过guacamole_entity
指定了与之关联的唯一名称。
如果删除一个用户组,其相关的实体也会被删除。因为当实体通过级联删除模式删除时,与指向实体的任何用户组都将被自动删除,所以建议使用实体作为任何删除操作的基础。
guacamole_user_group
表包含以下列:
- user_group_id
与每个用户组关联的唯一整数。该值在guacamole_user_group
表插入新条目时被自动生成。 - entity_id
代表该用户组的guacamole_entity
条目的entity_id
列的值。 - disabled
在确定授予特定用户的权限时,是否应考虑此组中的成员身份。如果此列设置为TRUE
或1
,将不会对该组中的成员的用户权限产生影响,无论这些权限是直接授予该组还是间接授予该组作为成员所在的组。默认情况下,不会禁用用户组,并且会考虑通过该组授予用户的权限。
用户组中的成员资格由guacamole_user_group_member
表中的条目决定。由于用户和用户组都可能是组的成员,因此每个条目都将包含组与成员的实体相关联。
guacamole_user_group_member
表包含以下列:
- user_group_id
具有指定成员的用户组的user_group_id
。 - member_entity_id
特定组的用户或用户组实体成员的entity_id
。
连接及参数
每个连接在guacamole_connection
表中都有一个条目,这个条目与以名称和值对方式存储在guacamole_connection_parameter
表中的参数具有一对多的关系。
guacamole_connection
表只是一个唯一的描述性名称与用于连接的协议的配对。它包含以下列:
- connection_id
与每个连接关联的唯一整数。将新条目插入guacamole_connection
表时,会自动生成此值。 - connection_name
与每个连接关联的唯一名称。这个值必须手动指定,且必须不同于同一连接组中已经存在的连接的名称。对其他表中的连接的引用使用connection_id
而不是connection_name
。 - protocol
该连接使用的协议。这应该是连接时guacd
发送的协议名称,例如:vnc
或rdp
。 - parent_id
与包含此连接的连接组关联的唯一整数,如果改连接在root
组中则该值为NULL
。 - max_connections
允许在任何时间连接到此连接的最大并发连接数,无论用户是谁。NULL
将使用guacamole.properties
中指定的默认值,0
表示无限制。 - max_connections_per_user
允许单个用户同时连接到此连接的最大并发连接数。NULL
将使用默认值
在guacamole.properties
中指定,值为0
表示无限制。 - proxy_hostname
应用于此连接的Guacamole代理守护程序(guacd
)的主机名或IP地址。如果为空,将使用guacamole.properties
中guacd-hostname
属性定义的值。 - proxy_port
应用于此连接的Guacamole代理守护程序(guacd
)的TCP端口。如果为空,将使用guacamole.properties
中guacd-port
属性定义的值。 - proxy_encryption_method
与该连接的Guacamole代理守护进程(guacd)通信所使用的加密方法。可以是NONE
,表示无加密,也可以是SSL
,使用SSL/TLS
加密。如果是NULL
,加密方法将由guacamole.properties
文件中的guacd-ssl
属性指定。 - connection_weight
连接的权重,当连接是一个BALANCING
连接组的一部分时用于加权负载平衡算法。这是一个整数值,当该值大于等于1时将对该连接相对于其他连接进行加权,值小于1则将导致该连接在该组中被禁用。如果设置为NULL
,该连接的默认权重将被配置为1
。 - failover_only
该连接是否仅用于故障切换情况,通常也称为”热备份“。如果设置为TRUE
或者是1
,则仅当同一BALANCING
连接组中的另一个连接由于远程桌面中的错误而失败时才会使用该连接。
在远程桌面发生故障时,无论此列的值如何,连接组都将始终透明地切换到下一个可用连接。此列仅指示是否应为此类情况保留特定连接,否则不使用。
此列仅对BALANCING
组内的连接有影响。
由于每个连接都有潜在地多个参数,其中每个参数的名称都是完全任意并且仅由使用中的协议决定,因此给定连接的每个参数在表guacamole_connection_parameter
中都有一个条目与其对应的连接相关联。此表包以下列:
connection_id
该参数所属连接的connection_id
。parameter_name
要设置的参数的名称。这是相关连接中指定的协议的文档中列出的名称。parameter_value
要分配给命名参数的值。虽然该值是一个任意字符串,但它必须符合连接成功所记录的协议的要求。
与添加一个用户相比,添加一个连接和相应的参数相对容易,因为它既不需要生成盐也不需要哈希的密码:
-- Create connection
INSERT INTO guacamole_connection(connection_name,protocol) VALUES('test', 'vnc');
-- Determine the connection_id
SELECT * FROM guacamole_connection WHERE connection_name='test' AND parent_id IS NULL;
-- Add parameters to the new connection
INSERT INTO guacamole_connection_parameter VALUES(1, 'hostname', 'localhost');
INSERT INTO guacamole_connection_parameter VALUES(1, 'port', '5901');
使用历史记录
当启动或终止一个连接时,将分别创建或更新guacamole_connection_history
表中的相应条目。每个条目都与使用连接的用户,连接本身,共享的配置文件(如果连接正在被共享)以及连接开始的时间相关联。如果连接已经结束,还将存储结束时间。
用户不太可能需要更新该表,但如果您希望生成有关Guacamole
使用情况的报告,了解该结构可能很有用。guacamole_connection_history
表有以下列:
history_id
与每一条历史记录关联的唯一整数。该值是在新的条目插入guacamole_connection_history
表时自动生成的。user_id
guacamole_user
表中与使用连接的用户相关联条目的user_id
。如果用户已经不存在,则该值将为NULL
。username
用户使用连接时与用户关联的用户名。此用户名值不能保证唯一标识用户,因为原始用户可能随后被重命名或删除。connection_id
guacamole_connection
表中与正在使用的连接相关联的条目的connection_id
。如果与历史记录关联的连接已经不存在,该值将为NULL
。connection_name
连接被使用时所关联使用的名称。sharing_profile_id
guacamole_sharing_profile
表中与用于访问连接的共享配置文件关联的条目的sharing_profile_id
。如果连接没有被分享(没有共享配置文件被使用),或者与历史记录关联的共享配置文件已经不存在,该值将为NULL
。sharing_profile_name
历史记录条目被记录时,与用于访问连接的共享配置文件关联的名称。如果连接没有被分享,该值将为NULL
。start_date
用户指定的连接启动时间。尽管名称是日期,但除了日期之外,此列还存储时间信息。end_date
连接结束的时间。如果连接依旧活跃,该列的值为NULL
。尽管名称是日期,但除了日期之外,此列还存储时间信息。
共享配置文件及其参数
每个共享配置文件都在guacamole_sharing_profile
表中有 一条记录,并与以名称/值对形式存储在guacamole_sharing_profile_parameter
表中的参数具有一对多的关系。
guacamole_sharing_profile
表只是一个可以使用共享配置文件共享的连接的唯一的描述性名称的配对,也称为“主连接”。它包含以下列:
sharing_profile_id
与每个共享配置文件相关联的唯一整数。该值会在一条新条目插入guacamole_sharing_profile
表时自动生成。sharing_profile_name
与每个共享配置文件相关联的唯一名称。该值必须手动指定,并且必须不同于同一主连接关联的任何现有共享配置文件名称。在其他表中引用共享配置文件,使用的是sharing_profile_id
,而不是sharing_profile_name
。primary_connection_id
与主连接关联的唯一整数。”主连接“是可以使用此共享配置文件共享的连接。
由于每个共享配置文件都有多个潜在的参数,其中每个参数的名称完全是任意且仅由与主连接相关联的协议确定的,因此给定共享配置文件的每个参数在与相应共享配置文件相关联的guacamole_sharing_profile_parameter
表中都有一个条目。此表包含以下列:
sharing_profile_id
该参数适用的guacamole_sharing_profile
表中的共享配置文件条目的sharing_profile_id
值。parameter_name
要设置的参数的名称。这是相关共享配置文件的主连接协议文档中列出的名称。parameter_value
要分配给命名参数的值。虽然该值是一个任意字符串,但它必须符合所记录的协议要求。
连接组
每个连接组在guacamole_connection_group
表中都有一个条记录,并且与其他组和连接具有一对多的关系。
guacamole_connection_group
表只是一个组类型的唯一描述性名称的配对,可以是ORGANIZATIONAL
或者BALANCING
。它包含了以下列:
connection_group_id
与每个连接组关联的唯一整数。该值会在guacamole_connection_group
插入一条新记录时自动生成。connection_group_name
与每个连接关联的唯一名称。该值必须手动指定且必须不同于同一连接组中现有的连机组名称。在其他表中引用连接组时,使用的是connection_group_id
,而不是connection_group_name
。type
连接组类型。该值可以是ORGANIZATIONNAL
或者BALANCING
。parent_id
与包含该连接组的连接组关联的唯一整数,如果该连接组归属于根连接组则为该值为NULL
。max_connections
该连接组在任一时间所允许的无论是何用户发起的最大并发连接数。NULL
将使用guacamole.properties
文件中指定的默认值,0
表示没有限制。该值仅对BALANCING
类型的组产生影响。max_connections_per_user
该连接组在任一时间所允许的单一用户所发起的最大并发连接数。NULL
将使用guacamole.properties
文件中指定的默认值,0
表示没有限制。该值仅对BALANCING
类型的组产生影响。enable_session_affinity
会话关联是否应用于此连接组。如果该列被设置为TRUE
或1
,用户将始终被路由到同一基础连接,直到其退出登录。正常的平衡行为将仅适用于每个用户在任一Guacamole
会话期间的首次连接尝试。默认情况下,不会启用会话关联,并且始终在整个连接组中平衡连接。该值仅对BALANCING
类型的组产生影响。
实际上添加一个连接组比添加一个新的连接更简单,因为它不需要在一个单独的表中存储相关参数:
-- Create connection group
INSERT INTO guacamole_connection_group(connection_group_name, type) VALUES('test', 'ORGANIZATIONAL');
权限
在架构中有几张权限表与Guacamole
认证模型中的权限类型相对应:系统权限控制影响整个系统的操作并控制影响系统内特定对象(如用户,连接,或组)的操作权限。
系统权限
系统权限由guacamole_system_permission
表中的条目定义。每个条目都授予特定用户或用户组执行特定系统操作的权限。
guacamole_system_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。permission
被授予的权限。该列可以有六个可能的值之一:ADMINISTER
授予管理整个系统的能力(本质上是一个通配符权限),CREATE_CONNECTION
授予创建连接的能力,CREATE_CONNECTION_GROUP
授予创建连接组的能力,CREATE_SHARING_PROFILE
授予创建共享配置文件的能力,CREATE_USER
授予创建用户的能力,或者CREATE_USER_GROUP
授予创建用户组的能力。
用户权限
用户权限由guacamole_user_permission
表中的条目定义。每个条目都授予特定的用户或用户组对现有用户执行特定操作的权限。
guacamole_user_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。affected_user_id
与受此权限影响的用户相关联的条目的user_id
列的值。这是将成为此权限表示的操作对象的用户。permission
被授予的权限。该列可以有四个可能的值之一:ADMINISTER
授予添加或删除影响用户的权限的能力,READ
授予读取与用户相关联的数据的能力,UPDATE
授予更新与用户相关联的数据的能力,或者DELETE
授予删除用户的能力。
用户组权限
用户组权限由guacamole_user_group_permission
表定义。每个条目都授予特定用户或用户组对现有用户组执行特定操作的权限。
guacamole_user_group_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。affected_user_group_id
与受此权限影响的用户组关联的条目的user_group_id
列的值。这是将成为该权限表示的操作对象的用户组。permission
被授予的权限。该列可以有四个可能的值之一:ADMINISTER
授予添加或删除影响用户组的权限的能力,READ
授予读取与用户组关联的数据的能力,UPATE
授予更新与用户组关联的数据的能力,DELETE
授予删除用户组的能力。
连接权限
连接权限由guacamole_connection_permission
表中的条目定义。每个条目都授予特定用户或用户组对现有连接执行操作的权限。
guacamole_connection_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。connection_id
与受此权限影响的连接关联的条目的connection_id
列的值。这是将成为该权限表示的操作对象的连接。permission
被授予的权限。该列可以有四个可能的值之一:ADMINISTER
授予添加或删除影响连接的权限的能力,READ
授予读取与连接关联的数据的能力,UPATE
授予更新与连接关联的数据的能力,DELETE
授予删除连接的能力。
共享配置文件权限
共享配置文件权限由guacamole_sharing_profile_permission
表中的条目定义。每个条目都授予特定用户或用户组对现有共享配置文件执行操作的权限。
guacamole_sharing_profile_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。sharing_profile_id
与受此权限影响的共享配置文件关联的条目的sharing_profile_id
列的值。这是将成为该权限表示的操作对象的共享配置文件。permission
被授予的权限。该列可以有四个可能的值之一:ADMINISTER
授予添加或删除影响共享配置文件的权限的能力,READ
授予读取与共享配置文件关联的数据的能力(这是使用共享配置文件共享活动连接的先决条件),UPATE
授予更新与共享配置文件关联的数据的能力,DELETE
授予删除共享配置文件的能力。
连接组权限
连接组权限由guacamole_connection_group_permission
表中的条目定义。每个条目都授予特定用户或用户组对现有连接组执行操作的权限。
guacamole_connection_group_permission
表包含以下列:
entity_id
与拥有该权限的用户和用户组关联的条目的entity_id
列的值。connection_group_id
与受此权限影响的连接组关联的条目的sharing_profile_id
列的值。这是将成为该权限表示的操作对象的连接组。permission
被授予的权限。该列可以有四个可能的值之一:ADMINISTER
授予添加或删除影响连接组的权限的能力,READ
授予读取与连接组关联的数据的能力,UPATE
授予更新与连接组关联的数据的能力,DELETE
授予删除连接组及其隐含的内容的能力。