有没有办法将应用程序上下文与非 Sybase DB 服务器中的数据库连接进行通信(类似于 Sybase 中的 set_appcontext)?

2024-06-26

Sybase 有一种让应用程序进行通信的方法“上下文”数据 http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sag/@Generic__BookTextView/38861;hf=0- 例如应用程序的最终用户名等。 - 数据库连接会话。上下文数据基本上只是一组键值对,通过以下方式存储/检索set_appcontext/get_appcontext存储过程。

QUESTION:

其他主要数据库服务器(MSSQL/Oracle/MySQL)是否具有类似于 Sybase 的将应用程序上下文与会话进行通信的功能set_appcontext?

Details:

应用程序上下文的一个具体实际用途是,当您有一个具有中间层的应用程序作为非常特定的通用数据库用户连接到数据库时(示例包括“webuser”/“http”,用于在 Web 服务器上运行的 Web 应用程序后端或“ myappserver”应用程序服务器的用户)。

当发生这种情况时,我们仍然希望数据库会话知道最终用户(例如使用应用程序客户端的实际用户)是谁,无论是为了访问控制还是(与我的兴趣更相关),以便审计/历史触发器能够确定哪个最终用户进行了更改并将该最终用户信息记录到审核表中。

请注意,该信息是在会话级别设置的,这意味着在该会话中执行的任何插入/更新/删除都能够使用上下文数据,而无需将其传递给每个单独的 SQL 语句 - 这对于以下情况非常重要:一个触发器。

作为一个非常具体的示例来说明它的有用性,假设您有一个应用程序服务器代表客户端启动数据库会话,您可以在其中插入/更新/删除 5 个不同表中的行。您希望为这 5 个表中的每一个建立审计表,其中包括“哪个最终用户进行了每个更改”信息。

使用上下文数据,您可以使用触发器从应用程序上下文中检索“最终用户”数据并将其存储为审核表记录的一部分。如果不使用应用程序上下文,您将需要 (1) 将“最终用户”列添加到这 5 个表中的每一个(而不是仅审核表)以及 (2) 将您的应用程序服务器更改为插入或更新时设置应用程序服务器发出的每个 SQL 语句中该列的值。哦,这甚至没有涉及如何做到这一点,如果你是deleting a row.


Oracle 有几种不同的方法来实现这一点。首先,你有DBMS_APPLICATION_INFO 包 http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_appin2.htm。尽管您可以使用它来设置任意上下文信息,但它通常用于跟踪应用程序。您通常会将模块设置为应用程序的名称,并将操作设置为特定业务流程的描述。然后,您可以从 V$SESSION 引用此信息,并通过 V$SESSION_LONGOPS 监视长时间运行的操作。

Oracle 还具有创建称为上下文的数据库对象 http://download.oracle.com/docs/cd/B12037_01/server.101/b10759/statements_5002.htm。这是填充会话级上下文的更灵活的方法。您可以创建一个新上下文,然后在该上下文中创建您想要的任何属性。您的所有代码都可以简单地引用上下文。例如

SQL> create context my_ctx
  2    using pkg_ctx;

Context created.

SQL> create package pkg_ctx
  2  as
  3    procedure set_context;
  4  end;
  5  /

Package created.

SQL> create or replace package body pkg_ctx
  2  as
  3    procedure set_context
  4    as
  5    begin
  6      dbms_session.set_context( 'MY_CTX', 'USERNAME', 'Justin Cave' );
  7    end;
  8  end;
  9  /

Package body created.

SQL> exec pkg_ctx.set_context;

PL/SQL procedure successfully completed.

SQL> select sys_context( 'MY_CTX', 'USERNAME' )
  2    from dual;

SYS_CONTEXT('MY_CTX','USERNAME')
-------------------------------------------------------------------------------
Justin Cave
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将应用程序上下文与非 Sybase DB 服务器中的数据库连接进行通信(类似于 Sybase 中的 set_appcontext)? 的相关文章

  • 如何使用 mysqli 设置排序规则?

    我的数据库使用 utf8 czech ci 排序规则 我也想将其设置为我的数据库连接 如果我不想要默认的 utf8 general ci Mysqli set charset 不会让我设置排序规则 Here https bugs php n
  • 如何使用 SQL 语法更改主键约束?

    我有一个表 其主键约束中缺少一列 我不想通过 SQL Server 对其进行编辑 而是想将其放入脚本中以将其添加为更新脚本的一部分 我可以使用什么语法来执行此操作 我必须删除并重新创建关键约束吗 是的 唯一的方法是使用 Alter 表删除约
  • 案例与解码

    参考之前的一篇question https stackoverflow com questions 3193384 display sql custom text from table column result 我想知道是否总是可以更换D
  • SQL Server 2008:TOP 10 和不同的一起

    正如标题所示 我正在使用 SQL Server 2008 如果这个问题非常基本 我深表歉意 我才使用 SQL 几天 现在我有以下查询 SELECT TOP 10 p id pl nm pl val pl txt val from dm la
  • 主键和代理键有什么区别?

    我用谷歌搜索了很多 但没有找到带有示例的确切直接答案 任何例子都会更有帮助 主键是表中的唯一键 您选择它可以最好地唯一标识表中的记录 所有表都应该有一个主键 因为如果您需要更新或删除一条记录 您需要知道如何唯一标识它 代理键是人工生成的键
  • Sql查询增加多个项目的项目价值价格

    我想编写 Sql 查询来按百分比增加商品价格 场景是 在表中 我有 3 列 ID 商品名称 价格 Example If item Name is T shirt Increase price by 10 item Name is Jins
  • 带有身份验证查询的 Sybase 的 JDBC 连接

    我有一个连接到 Sybase 数据库的数据源 连接到数据库后 我需要执行身份验证语句 SET TEMPORARY OPTION CONNECTION AUTHENTICATION Company 是否有任何方法可以将此语句作为 JDBC 连
  • SQL LIKE 的 C# 版本

    有没有办法在 C 中搜索字符串中的模式 像 Sql LIKE 这样的东西会非常有用 正则表达式允许一切LIKE允许以及更多 但具有完全不同的语法 然而 由于规则LIKE是如此简单 其中 表示零个或多个字符 并且 表示一个字符 并且两者LIK
  • 如何查询两个日期之间的“日期”字段是字符串?

    我在 MySQL 数据库中有一个表 其中有一个名为 日期 的字段 问题是日期的格式为 DD MM YYYY 因此我无法将其作为 DATE 类型字段上传到 MySQL 相反 字段类型是字符串 考虑到这一点 我如何编写能够产生这种效果的查询 S
  • 当 COUNT(*) 为 NULL 时,GROUP BY 返回 0

    这是我原来的查询 SELECT CAST IndexedDate as varchar COUNT AS Logins FROM Table WHERE EventType Login AND IndexedDate gt DATEADD
  • 物化视图快速刷新-更新基表时插入和删除

    大家好 Stackoverflowers 的朋友们 TLDR MVIEW 是否使用UPDATE or DELETE INSERT刷新期间 前一段时间 当我在 Oracle 中摆弄物化视图时 遇到了一件晦涩难懂的事情 这是我的例子 2 个基表
  • 数据库记录的多级菜单

    我需要一些有关 PHP 的帮助 我有一个工作正常的多级 css 菜单 但现在我想根据数据库中的记录生成 菜单代码 div ul class dropdown li a href Link 1 a li li a href Link 2 a
  • 在 PostgreSQL 中向日期添加月份显示语法错误

    我使用的是Postgres 9 0版本 我想在日期中添加一些月份来计算新日期并在表中更新 这里要添加的月份数将是整数变量 我的代码如下 declare numberofmonths smallint 5 update salereg1 se
  • 如何修复在 AWS RDS 上锁定表名称创建 (errno: -1) 的 InnoDB 损坏?

    TIP Do not run ALTERMySQL Workbench 中用于 标准 TCP IP over SSH 连接的语句 最好是进入服务器并运行ALTER从那里 这样 如果您失去与服务器的连接 ALTER仍应完成其工作 我正在尝试在
  • 如何在SQL Server数据库的所有表的所有列中搜索特定字符串?

    我们想要在拥有大约 120 个表的所有数据库中搜索一个字符串 即 Hello World 我们考虑过像 mysql dump 一样进行转储 但它以奇怪的 bak 格式出现 应在每个表的每一列中进行搜索 任何类型的脚本都可以做到这一点 或者这
  • 即使为空也显示值

    我正在使用以下内容显示过去 7 天内添加的产品计数 即使 COUNT 0 我是否可以以某种方式定制查询以显示过去 7 天的所有产品 查询现状 SELECT DAYNAME dateadded DAY COUNT COUNT FROM pro
  • MySQL 错误:1395 无法从连接视图中删除

    我正在尝试从通过连接多个表生成的视图中删除一条记录 我有一个新用户要在此特定视图上删除和插入 我可以将记录插入视图 但无法从视图中删除 您能指出下面这段 SQL 语句中的错误吗 create view v1 as select a from
  • 在 VBScript 中的 SQL 字符串中使用 Excel 命名范围

    我已经在这里和谷歌上搜索过 但仍然无法解决我的问题 我正在尝试在我的中等效地使用 Excel 的命名范围 vbs文件 下面的代码可以在 excel 中的 VBA 中运行 但我无法让它在 vbs file ThisWorkbook Sheet
  • 从条件表中获取 WHERE 子句的条件

    我创建了以下简单的DataModel 我用以下数据填充了表格 1 桌子Customer INSERT INTO test customer CustomerName Country RegistrationDate VALUES Custo
  • 邮政编码 10 位数字字符使用的约束检查

    我有一张桌子 上面有Char 10 列类型 命名postal Code我需要对所有值进行约束检查 就像 10 位数字一样1234567890没有别的 我使用以下内容 CONSTRAINT CH PCDigit CHECK PostalCod

随机推荐