暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s USER Authentication 子句

wj2021 2022-10-26
240

USER Authentication 子句指定用来确定应用程序是否可以访问远程主机上目标计算机的信息。

USER Authentication Clause


当 CONNECT 语句连接到远程主机上的数据库服务器时需要 USER Authentication 子句。

CONNECT 语句后,远程主机上的所有数据库操作使用指定的用户名。

在 DB-Access 中,USING 子句在从 DB-Access 执行的文件中是有效的。在交互方式中,DB-Access提示输入密码,所以就不使用 USING 关键字和 validation_var

对验证参数变量的限制

在 UNIX™ 上,validation_var 中存储的密码必须是有效的密码,并且必须存在于 /etc/passwd 文件

中。如果应用程序连接到远程数据库服务器,则密码必须同时存在于本地远程数据库服务器的此文件中。

在 Windows™ 上,validation_var 中存储的密码必须是有效的密码,并且必须是用户管理器中输入的密码。如果应用程序连接到远程数据库服务器,则密码必须同时存在于客户机和服务器的域中。

对用户标识参数的限制

如果发生以下任意一种情况,则连接会被拒绝:

⚫指定的用户缺少访问数据库环境中指定数据库的权限。

⚫指定的用户缺少连接到远程主机所必需的许可权。

⚫您提供了 USER Authentication 子句但是遗漏了 USING validation_var 指定

为了与 CONNECT 语句的 X/Open 标准一致,GBase 8s ESQL/C 预处理器允许具有 USER

Authentication 子句的 CONNECT 语句不带 USING validation_var 指定。然而如果没有提供 validation_var ,则数据库服务器在运行时拒绝连接。

在 UNIX™ 上,您指定的 user_id 必须是有效的登录名且必须存在于 /etc/passwd 文件中。如果该应用程序连接到远程服务器,则登录名必须同时存在于本地和远程数据库服务器的此文件中。在 Windows™ 上,您指定的 user_id 必须是有效的登录名且必须存在于用户管理器中。如果应用程序连接到远程数据库服务器,则登录名必须同时存在于客户机和服务器的域中。

缺省用户 ID 的使用

如果未提供 USER Authentication 子句,则缺省的用户 ID 用于尝试此连接。

缺省用户 ID 是运行此应用程序的用户的登录名。在这种情况下,您通过标准授权过程获得网络许可权。例如,在 UNIX™ 上,缺省用户 ID 必须匹配可信主机文件(/etc/hosts.equiv 文件或由REMOTE_SERVER_CFG 配置参数指定的文件)。在 Windows™ 上,您必须是域的成员,或者如果数据库服务器是本地安装的,则您必须是安装它的计算机上的有效用户。

缺省连接规范

可以使用 DEFAULT 关键字请求到缺省数据库服务器的缺省连接,而不用指定显式数据库环境。缺省数据库可以是本地的或远程的。要指定缺省数据库服务器,请在 GBASEDBTSERVER 中设置其名称。这种形式的 CONNECT 选项打不开数据库。

如果该 CONNECT TO DEFAULT 语句成功,则必须使用 DATABASE 语句或 CREATE

DATABASE 语句来在缺省数据库环境中打开或创建数据库。

使用 DATABASE 语句的隐式连接

如果不在应用程序中执行 CONNECT 语句,则第一条 SQL 语句必须是以下数据库语句(或者是以下语句的单个 PREPARE 语句):

⚫DATABASE

⚫CREATE DATABASE

⚫DROP DATABASE

如果这些数据库语句是应用程序中的第一条 SQL 语句,则该语句建立到数据库服务器的连接,这被称为隐式连接。如果数据库服务器仅指定数据库名称,则从 DBPATH 环境变量获取数据库服务器名称。这种情况在 指定数据库环境 中有描述。

进行隐式连接的应用程序可以显式建立其它的连接(使用 CONNECT 语句),但是不能建立另一个隐式连接,除非最初的隐式连接已关闭。应用程序可使用 DISCONNECT 语句终止隐式连接。在建立隐式连接之后,在关闭显式连接之前,不能使用任何数据库语句创建隐式连接。

进行任何隐式连接之后,该连接被认为是缺省连接,不管数据库服务器是否是 GBASEDBTSERVER

环境变量指定的缺省值。如果进行了其它显式连接,则此功能允许应用程序引用隐式连接,因为隐式连接没有标识。

例如,如果您在隐式连接后建立一个显式连接,则您可以通过发出 SET CONNECTION DEFAULT 语句使隐式连接变为当前连接。然而,这意味着一旦建立了隐式连接,则不能使用 CONNECT DEFAULT 语句,因为隐式连接现在是当前连接。

数据库语句总可用来打开数据库或者在当前数据库服务器上创建新的数据库。

WITH CONCURRENT TRANSACTION 选项

WITH CONCURRENT TRANSACTION 子句使您能够在当前连接中存在活动事务时,切换到另一个连接。如果当前连接不是使用 WITH CONCURRENT TRANSACTION 子句建立的,则您不能在事务是活动的情况下切换到另一个连接;CONNECT 或 SET CONNECTION 语句失败,返回一条错误,并且当前连接中的事务继续保持活动。

这种情况中,应用程序必须在当前连接切换到另一个连接之前提交或者回滚当前连接中活动的事务。

WITH CONCURRENT TRANSACTION 子句支持多个并发事务的概念,其中每个连接可有其自己的事务并且 COMMIT WORK 和 ROLLBACK WORK 语句仅影响当前的连接。WITH CONCURRENT TRANSACTION 子句不支持单个事务横跨多个连接上的数据库的全局事务。COMMIT WORK 和 ROLLBACK WORK 语句对跨越多个连接的数据库不起作用。

以下示例说明如何使用 WITH CONCURRENT TRANSACTION 子句:

main()

{

EXEC SQL connect to 'a@srv1' as 'A';

EXEC SQL connect to 'b@srv2' as 'B' with concurrent transaction;

EXEC SQL connect to 'c@srv3' as 'C' with concurrent transaction;

/*

Execute SQL statements in connection 'C' , starting a transaction

*/

EXEC SQL set connection 'B'; -- switch to connection 'B'

/*

Execute SQL statements starting a transaction in 'B'.

Now there are two active transactions, one each in 'B' and 'C'.

*/

EXEC SQL set connection 'A'; -- switch to connection 'A'

/*

Execute SQL statements starting a transaction in 'A'.

Now there are three active transactions, one each in 'A', 'B' and 'C'.

*/

EXEC SQL set connection 'C'; -- ERROR, transaction active in 'A'

/*

SET CONNECTION 'C' fails (current connection is still 'A')

The transaction in 'A' must be committed or rolled back because

connection 'A' was started without the CONCURRENT TRANSACTION

clause.

*/

EXEC SQL commit work; -- commit tx in current connection ('A')

/*

Now, there are two active transactions, in 'B' and in 'C',

which must be committed or rolled back separately

*/

EXEC SQL set connection 'B'; -- switch to connection 'B'

EXEC SQL commit work; -- commit tx in current connection ('B')

EXEC SQL set connection 'C'; -- go back to connection 'C'

EXEC SQL commit work; -- commit tx in current connection ('C')

EXEC SQL disconnect all;

}

警告:

当应用程序使用 WITH CONCURRENT TRANSACTION 子句建立到同一个数据库环境的多个连接时,可能发生死锁现象。

TRUSTED 子句

使用 TRUSTED 子句指定应用程序连接到数据库环境的连接是可信连接。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论