配置对 SecureData 的访问权限
Vertica 集成函数需要使用多条信息才能连接到 SecureData 并对其进行身份验证。
SecureData 全局配置设置
SecureData 集成具有一个必需的设置和两个可选设置,您可以使用 VoltageSecureConfigureGlobal 函数对其进行全局设置。此函数将设置保存到名为 /voltagesecure/conf.global
的配置文件中,该文件存储在 Vertica 分布式文件系统 (DFS) 中。Vertica 使用此文件系统来存储所有节点都可以访问的数据。在使用任何其他 SecureData 集成函数之前,必须使用此函数创建该文件。所有可以访问 SecureData 函数的用户都可以访问此文件中的设置。
必需设置的是 SecureData 策略文件的 URL。此文件为 SecureData 集成库提供有关如何配置 SecureData 设备的详细信息。此库还使用此 URL 来确定 SecureData 设备的地址。
两个可选设置是:
-
allow_short_fpe
: 设置为 True 时,SecureData 将忽略编码 FPE 值的长度下限。通常,SecureData 不使用 FPE 来加密短于下限(通常为 8 位)的数据。有关详细信息,请参阅《SecureData 架构指南》的“数据长度限制”部分。 -
enable_file_cache
: 设置为 True 时,Vertica 会将 SecureData 策略文件和加密密钥缓存到磁盘,而不仅仅是内存。默认为 false。
此示例将策略 URL 全局设置为 https://voltage-pp-0000.example.com/policy/clientPolicy.xml 并将网络超时设置为 200 秒。
=> SELECT VoltageSecureConfigureGlobal(USING PARAMETERS
policy_url='https://voltage-pp-0000.example.com/policy/clientPolicy.xml',
NETWORK_TIMEOUT=200)
OVER ();
policy_url | allow_short_fpe | enable_file_cache | network_timeout
-----------------------------------------------------------------+-----------------+-------------------+-----------------
https://voltage-pp-0000.example.com/policy/clientPolicy.xml | | | 200
(1 row)
跨节点手动刷新客户端策略:
=> SELECT VoltageSecureRefreshPolicy() OVER ();
PolicyRefresh
-------------------------------------------------------------------------------------
Successfully refreshed policy on node [v_sandbox_node0001]. Policy on other nodes
will be refreshed the next time a Voltage operation is run on them.
(1 row)
重要
SecureData 集成一次仅支持 SecureData 设备的一个配置。SecureData 用户配置设置
其余的 SecureData 设置用于定义 SecureData 用户信息。这些设置通常特定于访问集成函数的每个用户。但是,您可以让所有 Vertica 用户共享相同的 SecureData 用户配置。这些设置是:
- SecureData 的身份验证凭据。所需的确切信息取决于 SecureData 设备的配置。可以使用以下四种设置:
-
username
:用于标识自己的用户名。用户名由 LDAP(使用 LDAP 身份验证时)定义,或由 SecureData 设备(使用共享密钥身份验证时)定义。 -
identity
:要使用的 SecureData 身份。有关 SecureData 中身份的详细信息,请参阅《SecureData 管理员指南》。身份通常采用电子邮件地址的形式。当 SecureData 设备使用 LDAP 身份验证时,LDAP 帐户必须具有对该身份的访问权限。 -
shared_secret
:在 SecureData 中设置的密码。 -
password
:使用 SecureData 进行身份验证时要使用的 LDAP 密码。
-
您可以同时提供用户名和身份,具体取决于 SecureData 设备的配置。可以将 SecureData 设备配置为根据 SecureData 用户名提供身份。
但是,只能使用 shared_secret 或密码。如果同时设置了这两个参数,Vertica SecureData 函数将退出并返回错误。
您可以使用以下两个选项来设置这些配置值:在用户定义的会话参数中进行设置,或者将值保存到存储在 Vertica 分布式文件系统中的配置文件中。
设置 SecureDate 用户会话参数
使用 ALTER SESSION 语句为 voltagesecurelib 库设置参数。此库包含所有 SecureData 函数。以下示例演示如何配置会话以使用共享密钥身份验证访问 SecureData。
=> ALTER SESSION SET UDPARAMETER FOR voltagesecurelib identity='alice@example.com';
ALTER SESSION
=> ALTER SESSION SET UDPARAMETER FOR voltagesecurelib username='alice';
ALTER SESSION
=> ALTER SESSION SET UDPARAMETER FOR voltagesecurelib shared_secret='my_shared_secret';
ALTER SESSION
设置后,这些参数仅在会话期间使用。
将参数保存到配置文件中
可以使用 VoltageSecureConfigure 函数将 SecureData 用户参数保存到 DFS 中的配置文件中。必须为配置文件提供文件名。可以选择将 SecureData 参数存储在用户特定的文件中,只需提供一个文件名,例如 securedata.conf
。在后台,配置文件将存储在 DFS 中以您的用户名命名的目录下。此目录可防止您的配置文件与其他用户的文件发生冲突。访问配置文件时不需要使用此目录名称。
还可以将配置参数存储在名为 /voltagesecure/conf
的绝对文件中。所有有权访问 SecureData 集成函数的用户都可以在其函数调用中使用此配置文件。如果访问 SecureData 函数的所有用户共享相同的 SecureData 用户设置,则您也可以使用此文件。
重要
所有有权访问 VoltageSecureConfigure 函数的用户都可以写入全局/voltagesecure/conf
文件。用户无需具有对此文件的写入权限即可在调用其他 SecureData 集成函数时使用它。通常情况下,您可以选择授予用户对 VoltageSecureConfigure 的访问权限以保存其自己的配置文件,或者您可以使用全局 /voltagesecure/conf
文件,而无需授予用户对 VoltageSecureConfigure 的访问权限。
会话参数中的值会覆盖配置文件中的值。
您可以使用要保存到配置文件的参数调用 VoltageSecureConfigure。未在此函数调用中设置的值也不会在配置文件中设置。必须使用会话参数将这些值提供给其他 SecureData 集成函数。
如果选择将密码或共享密钥保存到配置文件中,则不会直接将其传递给 VoltageSecureConfigure 函数。而是在适当的会话变量中设置值,然后将 VoltageSecureConfigure 的 store_password
或 store_shared_secret
参数设置为 true。当这些参数中的任何一个为 true 时,VoltageSecureConfigure 会从会话变量中读取值并将其保存到配置文件中。
当心
一般情况下,用户无法直接从 DFS 中存储的文件中读取数据。但是,对于所有有权访问从 DFS 读取 UDx 函数的用户而言,均有权从 Vertica 中访问这些文件。
此外,这些文件以纯文本形式存储在每个节点的文件系统中。任何对节点具有适当文件系统访问权限的人员均可读取该文件的内容。
决定是否将密码或共享机密等敏感信息存储在共享的或每个用户的配置文件中时,您均应考虑上述这两个事实。
示例:创建用户特定的配置文件
以下示例显示了如何创建用户特定的配置文件。此示例不存储密码或共享密钥等信息,因此仍必须为这些值设置会话参数,然后才能调用其他 SecureData 集成函数。
=> \x
Expanded display is on.
=> SELECT VoltageSecureConfigure(USING PARAMETERS config_dfs_path='voltage.conf',
username='alice', identity='alice@example.com', store_password=false
) OVER ();
-[ RECORD 1 ]-----+----------------------------------------------------------------
config_dfs_path | voltage.conf
identity | alice@example.com
username | alice