使用 HTTP 消息系统时,SQL Remote 利用超文本传输协议 (HTTP) 通过 Internet 发送消息。以文本格式对消息进行编码,然后通过 HTTP 将其发送到目标数据库。使用用作 HTTP 服务器的 SQL Anywhere 数据库发送和接收消息。
将 SQL Anywhere 数据库服务器用作 HTTP 服务器,该服务器可将 SQL Remote 消息传入或传出远程数据库。缺省情况下,新初始化的 SQL Anywhere 数据库没有所定义的允许其作为消息服务器的 Web 服务。在新创建的 SQL Anywhere 数据库中定义三个系统存储过程(sr_add_message_server、sr_drop_message_server 和 sr_update_message_server)以允许您定义所需的数据库对象,以便该数据库可用作 HTTP 服务器以传送 SQL Remote 消息。
必须通过 SQL Anywhere 16.0 和内部版本号为 3336 或更高的数据库服务器对该数据库进行初始化。查询 SYS.SYSHISTORY 系统表以确定初始化数据库时所使用的数据库服务器版本和内部版本。如果初始化数据库时使用的是 16.0 和内部版本号小于 3336 的数据库服务器,则可通过执行 "ALTER DATABASE UPGRADE PROCEDURE ON" 来更新数据库。
您需要决定是否要运行单独的数据库服务器或是否要将现有的统一数据库用作消息服务器。在作出该决定时请考虑以下事项:
通过消息服务器对远程数据库进行验证时,该服务器会使用远程数据库的发布者以及所提供的口令进行验证。尽管用户存在于统一数据库中,用户仍可能未定义 HTTP 消息系统所需的口令(远程用户可能没有连接特权)。如果将 CONNECT 特权授予统一数据库中的远程用户会导致安全问题,则可建立一个单独的数据库以用作消息服务器。
如果统一数据库的负载很重,则在统一数据库运行时向其添加消息服务器功能可能会使计算机资源超载。
要建立要用作消息服务器的数据库所需的数据库对象,可调用 sr_add_message_server 存储过程,该过程可对数据库中的 SQL Remote 定义进行查询。 请参见sr_add_message_server 系统过程。
如果要将消息服务器创建为单独的数据库,则需要使用与统一数据库中的定义相匹配的 SQL Remote 定义来定义第二个数据库。可使用 dbunload 实用程序来创建该统一数据库的副本,并指定 -n 选项以仅卸载统一数据库的模式,而不卸载数据:
dbunload -n -an -c "ENG=cons.DBN=cons;UID=DBA;PWD=sql" |
如果要将单独的数据库用作消息服务器,则在对统一服务器中的 SQL Remote 定义进行更改时,必须也要在消息服务器数据库中作出相应的更改。
要建立消息服务器,就必须保证数据库服务器能够对用于存储 SQL Remote 消息的目录进行访问。要定义用于存储消息的目录,可使用 SET REMOTE OPTION 命令并将 root_directory HTTP 消息参数设置为用于存储 SQL Remote 消息的目录。接下来,选择将拥有要创建的新对象的数据库用户,并确保该用户是一个角色。最后,执行 sr_add_message_server 存储过程,并传入将拥有这些对象的用户的名称。 请参见SET REMOTE OPTION 语句 [SQL Remote]和sr_add_message_server 系统过程。
每当对消息服务器的 SQL Remote 定义进行更改(例如,添加或删除远程用户)时,都要运行 sr_update_message_system 存储过程以更新支持消息服务器所需对象的定义。在存储过程运行期间以及删除和重新创建对象时,消息服务器在短时间内将无法进行复制操作。 请参见sr_update_message_server 系统过程。
如果不再将数据库用作消息服务器,则可运行 sr_drop_message_system 存储过程来删除为支持消息服务器所创建的对象。 请参见sr_drop_message_server 系统过程。
在创建完支持消息服务器所需的对象后,在启动消息服务器数据库服务器时,需要使用 -xs 选项来启用对数据库服务器的 HTTP(和/或 HTTPS)支持。 有关使用 dbmlsync 的详细信息,请参见-xs 数据库服务器选项。
与已定义消息服务器所需对象的用户有关的 HTTP 服务器端协议选项:
ServerPort | PORT 指定在计算机上的缺省端口 80 和 443 被占用时数据库服务器用来监听 HTTP 或 HTTPS 请求的端口号。 请参见ServerPort (PORT) 协议选项。
MaxRequestSize | MAXSIZE 指定单个 HTTP 请求的最大大小。缺省值为 100 KB。如果已定义的 SQL Remote 消息大小(dbremote 命令行上的 -l 选项)大于 100 KB,则还需增加数据库服务器所能接受的最大 HTTP 请求的大小。缺省的 SQL Remote 消息大小为 50 KB。 请参见MaxRequestSize (MAXSIZE) 协议选项。
Identity (仅限 HTTPS) 使用 HTTPS 时,标识文件包含公共证书及其专有密钥,对于不是自签名的证书,标识文件也包含所有的签名证书,其中包括加密证书。该证书的口令必须通过 Identity_Password 参数指定。 请参见Identity 协议选项。
Identity_Password (仅限 HTTPS) 使用传送层安全时,此选项用于指定与 Identity 协议选项指定的加密证书口令相匹配的口令。 请参见Identity_Password 协议选项。
要使用 SQL Remote 和 HTTP,则参与到系统中的每个数据库都需要一个 HTTP 地址、一个用户 ID 和一个口令。它们是不同的标识符:HTTP 地址是每个消息的终点,而用户 ID 和口令是用户针对服务器进行验证时所输入的名称和口令。
在 SQL Remote 消息代理 (dbremote) 连接到消息系统以发送或接收消息之前,用户必须已在其计算机上设置了一组控制参数,否则该用户将被提示指定所需信息。仅在第一次连接时需要这些信息。这些信息将被保存起来,并用作后续连接的缺省设置。
HTTP 消息系统使用下列通过 SET REMOTE OPTION 语句进行设置的控制参数:
certificate 要创建安全 (HTTPS) 请求,客户端必须有权访问 HTTPS 服务器所用的证书。必要的信息在一个用分号分隔的键/值对字符串中指定。可以使用 file 键来指定证书的文件名称。不能同时指定 file 和 certificate 键。可以使用以下键:
按键 | 缩写 | 说明 |
---|---|---|
file | 证书的文件名 | |
certificate | cert | 证书本身 |
company | co | 证书中指定的公司 |
unit | 证书中指定的公司单位 | |
name | 证书中指定的公用名 |
只有被定向到 HTTPS 服务器的请求或可从非安全服务器重定向到安全服务器的请求才需要证书。仅支持 PEM 格式的证书。certificate='file=filename'
client_port 标识 SQL Remote 使用 HTTP 进行通信的端口号。该子句是为通过防火墙的连接提供的,并建议只用于此类连接,因为防火墙会对 "外发" TCP/IP 连接进行过滤。您可以指定单个端口号、端口号范围或是两者的组合。如果操作系统在 SQL Remote 关闭先前运行的端口后未及时释放端口,则指定一个低的客户端端口号可能会导致 SQL Remote 无法发送和接收消息。client_port=nnnnn[-mmmmm]'
debug 当设置为 YES 时,输出日志中将显示所有的 HTTP 命令及响应。此信息可用于解决 HTTP 支持问题。缺省值是 NO。
password 消息服务器数据库口令。使用 RFC 2617 基本验证向第三方 HTTP 服务器和网关验证身份。password='password'
proxy_host 指定代理服务器的 URI。针对 SQL Remote 必须通过代理服务器访问网络时使用。指示 SQL Remote 将要连接到代理服务器,并通过它将请求发送到消息服务器。proxy_host=' http://proxy-server[:port-number]'
reconnect_retries 失败前链接尝试打开与服务器的套接字的次数。缺省值为 4。当您设置此参数时,只会影响重新连接。FTP 链接建立的初始连接不受影响。
reconnect_pause 每次连接尝试间停顿的时间(以秒为单位)。缺省设置为 30 秒。当您设置此参数时,只会影响重新连接。FTP 链接建立的初始连接不受影响。
root_directory 在客户端指定该 HTTP 控制参数时,将忽略该参数。在调用 sr_add_message_server 或 sr_update_message_server 存储过程前,在消息服务器中定义该控制参数。指定消息服务器可访问的用于存储 SQL Remote 消息的目录。在使用 HTTP 消息系统时,为远程用户或发布者所指定的地址只能包含单个子目录,不能包含多个子目录。root_directory='c:\msgs'
url 指定服务器名称或 IP 地址,还可以指定正在使用的 HTTP 服务器的端口号,用分号分隔。如果请求通过中继服务器传递,还可选择添加 URL 扩展名以指示请求将传递到的服务器群。url ='server-name[:port-number][url-extension]'
user 消息服务器数据库用户 ID。使用 RFC 2617 基本验证向第三方 HTTP 服务器和网关验证身份。user='userid'
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |