加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – DataSnap和数据库连接/登录

发布时间:2020-12-15 09:14:47 所属栏目:大数据 来源:网络整理
导读:我正在尝试以“正确”的方式从我的DataSnap应用程序的服务器建立与数据库的连接. 数据库中的每个(大多数)表都有字段(其值通过插入和更新时的触发器设置),称为Updated和Created(这是写入记录时的当前时间戳)和updated_by和created_by(应该)包含当前登录的用户
我正在尝试以“正确”的方式从我的DataSnap应用程序的服务器建立与数据库的连接.

数据库中的每个(大多数)表都有字段(其值通过插入和更新时的触发器设置),称为Updated和Created(这是写入记录时的当前时间戳)和updated_by和created_by(应该)包含当前登录的用户.

我希望用户从客户端“登录”,以便这些字段反映已登录的用户(并且通过扩展,我将从数据库获得用户身份验证,而不仅仅是从服务器获取).我可以从客户端处理服务器本身的身份验证,然后处理服务器上的OnUserAuthenticate和OnUserAuthorize事件.我试图将凭据传递给我的数据库,以便触发器可以正确设置上述字段.

那么接近这种情况的方法是什么?我很想知道客户端的DSAuthProxyUser和DSAuthProxyPassword是否可以使用,但是我找不到很多(任何)文档来说明我将如何使用它.我是否为每个连接的用户建立新连接?这对我来说似乎最合乎逻辑.我不会有很多并发用户.上榜30.最有可能是5-10.但这样做的“正常”方式是什么?我不希望(希望我没有)将用户名传递给我的每个插入/更新以设置表中的值.

我希望我已经清楚地解释了我的情况.

谢谢

解决方法

我还没有使用它,但在我看来Firebird 2中引入的 RDB$SET_CONTEXT()RDB$GET_CONTEXT()就是你所需要的.使用此方法,您可以设置(并获取)特定于用户会话(名称空间USER_SESSION)或当前事务(名称空间USER_TRANSACTION)的其他信息.您还可以检索当前会话(命名空间SYSTEM)的其他系统信息,但这可能与您的案例无关.

您需要做的是在OnUserAuthorize事件中调用RDB $SET_CONTEXT()方法,例如使用(作为查询):

SELECT RDB$SET_CONTEXT('USER_SESSION','actualuser','<name of user') 
FROM RDB$DATABASE

这里’actualuser’是我们使用的上下文变量.在您的触发器中,您可以检索名称(假设PSQL,带有声明的变量actualuser)

actualuser = RDB$GET_CONTEXT('USER_SESSION','actualuser');

然后,您可以在触发器的其余部分中使用actualuser.只需确保您还考虑未设置上下文变量的情况(例如,管理员直接更改数据库或类似的内容).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读