【Guacamole中文文档】二、用户指南 —— 6.数据库身份验证

数据库身份验证

Guacamole支持由MySQL、PostgreSQL或SQL Server数据库通过项目网站提供的可用扩展进行身份验证。使用数据库进行身份验证提供了附加的功能,如能够使用负载均衡连接组和基于Web的管理界面。与默认的XML驱动的身份验证模块不同,所有关于用户和连接的改变都会立即生效,用户不需要注销或重新登录即可看到新的连接。

虽然大多数身份验证扩展是独立运行的,但数据库身份验证可以充当从属角色,从而允许来自其他身份验证扩展的用户和用户组与数据库内的连接相关联。如果用户和组的名称相同,则认为它们与数据库中的用户和组相同,并且如果成功,则另一个扩展的身份验证结果将受信任。因此,在多个系统下拥有帐户的用户在成功登录后将能够看到来自每个系统的数据。有关与其他机制一起使用数据库身份验证的更多信息,请参阅在LDAP身份验证中将LDAP与数据库关联

为了使用数据库身份验证扩展,你需要:

  1. 一个受支持的数据库,目前由MariaDB,MySQL,PostgreSQL或SQL Server。
  2. ‎有足够的权限来创建新数据库、创建新用户以及授予这些用户权限。‎
  3. 可从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数据库

数据库身份验证模块需要一个数据库来存储身份验证数据以及需要一个用户只用于数据访问和操作。你可以使用现有数据库和现有用户,但为了简单和安全起见,这些说明假定你将创建一个新数据库和新用户,该数据库和新用户将仅被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表拥有SELECTUPDATEINSERTDELETE权限。此外,如果使用PostgreSQL,用户需要对所有Guacamole表格中的所有序列拥有SELECTUSAGE权限。不应授予其他权限。

这些说明将用户称为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-incubating0.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目录中。要安装数据库身份验证扩展,必须:

  1. 创建GUACAMOLE_HOME/extensionsGUACAMOLE_HOME/lib目录(如果不存在)。
  2. 根据你使用的是MySQLMariaDBPostgreSQL或是SQL Server,从GUACAMOLE_HOME/extensions目录中拷贝guacamole-auth-jdbc-mysql-1.4.0.jarguacamole-auth-jdbc-postgresql-1.4.0.jarguacamole-auth-jdbc-sqlserver-1.4.0.jar
  3. 拷贝你的数据库的JDBC驱动到GUACAMOLE_HOME/lib目录。没有数据库的JDBC驱动,Guacamole将无法连接并验证其用户身份。
  4. ‎将Guacamole配置为使用数据库身份验证,如下所述。‎
❗重点:
为了完成安装,需要通过重启servlet容器来重启Guacamole。这样做将断开所有活跃用户的连接,因此请确保在尝试安装之前这样做是安全的。如果未正确配置数据库身份验证,则在修复配置之前,Guacamole不会再次启动。

配置Guacamole使用数据库身份验证

要使Guacamole正确地连接到你的数据库,必须向guacamole.properties中添加额外的属性。这些属性特定于所使用的数据库,必须正确设置才能进行身份验证。

数据库身份验证扩展绝对需要的属性相对较少且不言自明,仅描述如何建立与数据库的连接,以及Guacamole在查询数据库时将如何进行身份验证:

  • MySQL
参数说明
mysql-hostname托管你的数据库的服务器的主机名或IP地址。
mysql-database为Guacamole创建的数据库名称。本章节的示例将其命名为guacamole_db
mysql-usernameGuacamole用于连接数据库的用户的用户名。本章节的示例将其命名为guacamole_user
mysql-password验证数据库时Guacamole应该提供的密码。本章节的示例用some_password指代。

连接一个本地托管的MySQL数据库的最小化guacamole.properties配置文件如下:

# MySQL properties
mysql-hostname: localhost
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password
  • PostgreSQL

    参数说明
    postgresql-hostname托管你的数据库的服务器的主机名或IP地址。
    postgresql-database为Guacamole创建的数据库名称。本章节的示例将其命名为guacamole_db
    postgresql-usernameGuacamole用于连接数据库的用户的用户名。本章节的示例将其命名为guacamole_user
    postgresql-password验证数据库时Guacamole应该提供的密码。本章节的示例用some_password指代。

    连接一个本地托管的PostgreSQL数据库的最小化guacamole.properties配置文件如下:

    # PostgreSQL properties
    postgresql-hostname: localhost
    postgresql-database: guacamole_db
    postgresql-username: guacamole_user
    postgresql-password: some_password
    
  • SQL Server

    参数说明
    sqlserver-hostname托管你的数据库的服务器的主机名或IP地址。
    sqlserver-database为Guacamole创建的数据库名称。本章节的示例将其命名为guacamole_db
    sqlserver-usernameGuacamole用于连接数据库的用户的用户名。本章节的示例将其命名为guacamole_user
    sqlserver-password验证数据库时Guacamole应该提供的密码。本章节的示例用some_password指代。

    连接一个本地托管的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-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-caverify-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驱动程序,则必须指定此属性以定义将使用的驱动程序。可能的值包括:

    • 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
    
‎密码期限/到期时间‎

“密码期限”指的是两个不同的概念:

  1. ‎要求用户在自上次更改密码(最长密码期限)以来经过一段时间后更改其密码。‎
  2. ‎防止用户过于频繁地更改其密码(最短密码期限)。

‎虽然防止用户过于频繁地更改其密码似乎很奇怪,但如果你担心快速更改密码可能会破坏密码过期(用户可以立即更改密码)或跟踪密码历史记录(用户可以循环浏览密码,直到历史记录用尽并且他们的旧密码再次可用),这确实是有道理的。‎

‎默认情况下,数据库身份验证不会对密码期限施加任何限制,并且有权更改其密码的用户可以根据需要频繁或不频繁地更改密码。可以使用一对属性启用密码期限限制,每个属性接受以天为单位给出的值:‎

  • 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

    实体的类型。可以是USERUSER_GROUP

用户

每个用户都在guacamole_userguacamole_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_saltNULLpassword_hash将被处理为简单的未经hash处理的密码。

  • password_salt

    ‎一个 32 字节的随机值。从 Web 界面创建新用户时,将使用加密安全随机数生成器随机生成此值。‎

    ‎这将始终为通过Guacamole设置密码的用户设置,但是在手动或通过外部系统插入时可以使用无盐密码哈希‎。如果password_saltNULLpassword_hash将被处理为简单的未经hash处理的密码。

  • password_date

    密码最后修改的日期和事件。当密码通过Guacamole界面修改时将会更新该值。这与guacamole_user_password_history表的内容一起,用于强制密码策略。

  • disabled

    是否拒绝此用户账户的登录尝试。如果此列设置为TRUE1,则此用户的登录尝试将被拒绝,就像该用户不存在一样。默认情况下,不会禁用用户帐户,如果用户提供正确的密码,登录尝试将成功。

  • expired

    如果设置为TRUE1,则要求用户在完全登录之前重置密码。用户将收到一份密码重置表单,在密码更改之前,不允许用户登录Guacamole。默认情况下,用户帐户不会过期,登录时不需要重置密码。

  • access_window_start

    一天中可以使用此用户帐户的时间(不是日期)。如果为NULL,则此限制不适用。如果设置为非空,则允许在指定时间之后尝试登录,而在指定时间之前尝试登录将被拒绝。

  • access_window_end

    一天中的时间(不是日期),在此时间之后,此用户帐户可能无法使用。如果为NULL,则此限制不适用。如果设置为非空,则在指定时间之后尝试登录将被拒绝,而在指定时间之前尝试登录将被允许。

  • valid_from

    ‎在此日期之后可以使用此用户帐户的日期(不是一天中的时间)。如果为NULL ,则此限制不适用。如果设置为非空,则允许尝试在指定日期之后登录,而尝试在指定日期之前登录将被拒绝。‎

  • valid_until

    ‎在此日期(不是一天中的时间)‎‎之后,此‎‎用户帐户不得使用。如果为NULL,则此限制不适用。如果设置为非空,则在指定日期之后登录的尝试将被拒绝,同时将允许尝试在指定日期之前登录。‎

  • timezone

    诠释access_window_startaccess_window_endvalid_fromvalid_until值时使用的时区。该值可以是getAvailableIDs()定义的任何Java TimeZone的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_dateguacamole_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_groupguacamole_entity表中都有一条相关的条目。每个用户组都通过guacamole_entity指定了与之关联的唯一名称。

如果删除一个用户组,其相关的实体也会被删除。因为当实体通过级联删除模式删除时,与指向实体的任何用户组都将被自动删除,所以建议使用实体作为任何删除操作的基础。

guacamole_user_group表包含以下列:

  • user_group_id

    与每个用户组关联的唯一整数。该值在guacamole_user_group表插入新条目时被自动生成。

  • entity_id

    代表该用户组的guacamole_entity条目的entity_id列的值。

  • disabled

    在确定授予特定用户的权限时,是否应考虑此组中的成员身份。如果此列设置为TRUE1,将不会对该组中的成员的用户权限产生影响,无论这些权限是直接授予该组还是间接授予该组作为成员所在的组。默认情况下,不会禁用用户组,并且会考虑通过该组授予用户的权限。

用户组中的成员资格由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发送的协议名称,例如:vncrdp

  • parent_id

    与包含此连接的连接组关联的唯一整数,如果改连接在root组中则该值为NULL

  • max_connections

    允许在任何时间连接到此连接的最大并发连接数,无论用户是谁。NULL将使用guacamole.properties中指定的默认值,0表示无限制。

  • max_connections_per_user

    允许单个用户同时连接到此连接的最大并发连接数。NULL将使用默认值
    guacamole.properties中指定,值为0表示无限制。

  • proxy_hostname

    应用于此连接的Guacamole代理守护程序(guacd)的主机名或IP地址。如果为空,将使用guacamole.propertiesguacd-hostname属性定义的值。

  • proxy_port

    应用于此连接的Guacamole代理守护程序(guacd)的TCP端口。如果为空,将使用guacamole.propertiesguacd-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

    会话关联是否应用于此连接组。如果该列被设置为TRUE1,用户将始终被路由到同一基础连接,直到其退出登录。正常的平衡行为将仅适用于每个用户在任一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授予删除连接组及其隐含的内容的能力。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值