gpt4 book ai didi

sql - 如何获取有关 SQL Select 语句的信息

转载 作者:行者123 更新时间:2023-12-04 06:36:17 27 4
gpt4 key购买 nike

我想知道是否有可能获得 select 语句中每个字段来自的表/字段的真实名称。

假设您有两个表,债权人和债务人都有代码、姓名和电话字段。

如果用户输入如下sql语句:

SELECT Code AS CustomerCode, Name AS CustomerName, Phone AS ContactNumber FROM Debtors.

这将导致 SQL 服务器返回字段名称 CustomerCode、CustomerName 和 ContactNumber。

是否有可能从 SQL 服务器获取某种元数据,将每个字段映射到其真实名称和它来自的表?

以编程方式,给定一个 SQL select 语句,我希望能够确定每个字段的真实名称以及它们来自的表的真实名称。

我不想自己解析 SQL,所以我认为可能需要将语句发送到 sql 服务器并在没有行数据的情况下取回此信息。

我们要做的是实现表/字段级别的安全性。用户可以输入 sql 语句从表中或跨多个表(使用联接)选择字段,并将结果显示在表中。这些字段被动态添加到网格控件中,但只允许用户查看。

如果用户加入多个表,我们如何以编程方式知道哪些字段来自哪个表?如果他们在 SQL 中使用别名,问题会变得更糟。

目前,这是在内部构建的遗留 sql 引擎(使用专有数据库)上工作,该引擎可以在没有行数据的情况下返回所有必需的表/字段信息,因此部分应用程序安全模型是围绕此构建的。然而,如果我们不能让它工作,那么将这个应用程序移动到像 SQL 服务器这样的东西可能会被证明是困难的。

除了 Sql server,还有其他 sql 数据库支持这种类型的功能吗?

最佳答案

据我所知,您无法获得该信息。

您可能可以在许多数据库中处理您的问题,但是,通过在数据库本身中使用 GRANT/REVOKE 安全性。假设用户登录到数据库本身(不仅仅是您的应用程序),许多 DBMS 允许您对表中的受限列授予 SELECT 权限。使用该技术,如果用户为列指定 ALIASes,它不会欺骗服务器。

快速谷歌表明,至少 PostgreSQL、SQL Server 和 Oracle 提供基于用户 ID 的列级 GRANT SELECT 保护。

有趣的问题,顺便说一句。

关于sql - 如何获取有关 SQL Select 语句的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com