App A通过Web服务Y与数据库X进行通信。服务Y允许对数据库X中的数据进行插入,更新和删除操作。许多授权人员可以使用app A并通过服务Y连接到数据库X. 开发人员Q想要创建数据库触发器,以记录有关数据库X中表的条目和更新的一些信息,包括设备ID或IP。开发人员Q可以通过服务Y建立与数据库X的连接来访问某些设备身份吗? 如果他/她不能,是否有解决方法?
答案 0 :(得分:0)
简短回答是的。如何更多地参与其中。您没有包含Web服务所使用的语言,因此请保持高级别,并首先关注实现不可知的方式。
用于编写Web服务的大多数语言捕获请求信息 - 设备信息,Web客户端信息,IP地址(虽然不可靠),身份验证标识(如果不是匿名访问)等。因此,创建跟踪此数据的一种典型方法是创建数据库中的会话表,您将所有相关的请求数据写入Web服务会话。然后为每个会话派生一个密钥。最后,为您执行DML的每个表添加一个会话密钥列。替代方法是拥有一个操作表(您已经拥有的)和匹配的日志表。操作表没有会话密钥列,但日志记录表有。还有其他记录活动的方法,这些只是为了证明这一点。
OO示例的另一种方法是创建一个在Web服务会话信息中添加的派生连接类。然后可以在数据库命令执行时访问它,通常通过命令对象完成,而不是编写触发器,而是以编程方式执行日志记录。
在您的特定情况下,后一种方法似乎比触发器更合适,因为当有人直接在数据库上执行DML或其他接口而不是Web服务时,触发器可能会触发。在这种情况下,将不会有任何请求信息。