Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在所有SQL选择中为一列设置限制?_Sql_Select - Fatal编程技术网

如何在所有SQL选择中为一列设置限制?

如何在所有SQL选择中为一列设置限制?,sql,select,Sql,Select,我们有一个数据库,为众多客户保存数据。我们希望让客户能够访问数据库,但只能访问属于他们的数据。解析select以插入where子句“and Company.Name='Acme'”让我觉得很弱,因为SQL select可能非常复杂,而且处理100%的情况可能很困难 是否有某种方法可以实现(我知道这不是有效的SQL): 选择*from*where Company.Name='Acme'和(在\u select中传递) 可以将完整选择嵌套在中,作为大型选择的内部部分。有没有办法做到以上几点?通过这种

我们有一个数据库,为众多客户保存数据。我们希望让客户能够访问数据库,但只能访问属于他们的数据。解析select以插入where子句“and Company.Name='Acme'”让我觉得很弱,因为SQL select可能非常复杂,而且处理100%的情况可能很困难

是否有某种方法可以实现(我知道这不是有效的SQL):

选择*from*where Company.Name='Acme'和(在\u select中传递)

可以将完整选择嵌套在中,作为大型选择的内部部分。有没有办法做到以上几点?通过这种方式,对select的限制非常简单,并且可能在100%的时间内都有效

select * from
(
  select * from table_a
) outer_table_a
where outer_table_a.col_a = 'test'
我经常这样做,尤其是当我想对内部查询中的数据(sum、max等)进行聚合时。我使用SQL Server进行聚合,我不知道它是否适用于其他DBMS,但如果它不适用,我会感到惊讶

我不知道我是否会依靠这种方法来有效地授予权限。也许视图会让你把事情锁得更紧一点。听起来好像您正计划在一个您可能还没有编写的查询上动态添加一些内容?在这种情况下,任何编写该查询的人都可以转换您感兴趣的列,从而使您能够看到您不想看到的内容,例如:

select * from
(
  select 'test' as col_a, launch_codes from table_a
) outer_table_a
where outer_table_a.col_a = 'test'
我经常这样做,尤其是当我想对内部查询中的数据(sum、max等)进行聚合时。我使用SQL Server进行聚合,我不知道它是否适用于其他DBMS,但如果它不适用,我会感到惊讶

我不知道我是否会依靠这种方法来有效地授予权限。也许视图会让你把事情锁得更紧一点。听起来好像您正计划在一个您可能还没有编写的查询上动态添加一些内容?在这种情况下,任何编写该查询的人都可以转换您感兴趣的列,从而使您能够看到您不想看到的内容,例如:

select * from
(
  select 'test' as col_a, launch_codes from table_a
) outer_table_a
where outer_table_a.col_a = 'test'
我经常这样做,尤其是当我想对内部查询中的数据(sum、max等)进行聚合时。我使用SQL Server进行聚合,我不知道它是否适用于其他DBMS,但如果它不适用,我会感到惊讶

我不知道我是否会依靠这种方法来有效地授予权限。也许视图会让你把事情锁得更紧一点。听起来好像您正计划在一个您可能还没有编写的查询上动态添加一些内容?在这种情况下,任何编写该查询的人都可以转换您感兴趣的列,从而使您能够看到您不想看到的内容,例如:

select * from
(
  select 'test' as col_a, launch_codes from table_a
) outer_table_a
where outer_table_a.col_a = 'test'
我经常这样做,尤其是当我想对内部查询中的数据(sum、max等)进行聚合时。我使用SQL Server进行聚合,我不知道它是否适用于其他DBMS,但如果它不适用,我会感到惊讶

我不知道我是否会依靠这种方法来有效地授予权限。也许视图会让你把事情锁得更紧一点。听起来好像您正计划在一个您可能还没有编写的查询上动态添加一些内容?在这种情况下,任何编写该查询的人都可以转换您感兴趣的列,从而使您能够看到您不想看到的内容,例如:

select * from
(
  select 'test' as col_a, launch_codes from table_a
) outer_table_a
where outer_table_a.col_a = 'test'

下面是一个针对Oracle数据库的名为“虚拟专用数据库”的系统解决方案:

对于其他数据库,请查看是否有类似的内置解决方案

但是使用WITH子句有一个非常简单的解决方案:

WITH
  tab_a__ AS (SELECT * FROM tab_a WHERE comp="xy"),
  tab_b__ AS (SELECT * FROM tab_b WHERE comp="xy")
SELECT ... //original select
您只需在select中找到所有已使用的表,然后在后面添加
\uuuu
,并将CTE添加到WITH子句中。

注意:有些数据库不支持WITH子句,尽管它是SQL标准。某些数据库可能有别名长度限制,您可以通过添加后缀来超过该限制。

这里有一个系统解决方案,名为“虚拟专用数据库”,用于Oracle数据库:

对于其他数据库,请查看是否有类似的内置解决方案

但是使用WITH子句有一个非常简单的解决方案:

WITH
  tab_a__ AS (SELECT * FROM tab_a WHERE comp="xy"),
  tab_b__ AS (SELECT * FROM tab_b WHERE comp="xy")
SELECT ... //original select
您只需在select中找到所有已使用的表,然后在后面添加
\uuuu
,并将CTE添加到WITH子句中。

注意:有些数据库不支持WITH子句,尽管它是SQL标准。某些数据库可能有别名长度限制,您可以通过添加后缀来超过该限制。

这里有一个系统解决方案,名为“虚拟专用数据库”,用于Oracle数据库:

对于其他数据库,请查看是否有类似的内置解决方案

但是使用WITH子句有一个非常简单的解决方案:

WITH
  tab_a__ AS (SELECT * FROM tab_a WHERE comp="xy"),
  tab_b__ AS (SELECT * FROM tab_b WHERE comp="xy")
SELECT ... //original select
您只需在select中找到所有已使用的表,然后在后面添加
\uuuu
,并将CTE添加到WITH子句中。

注意:有些数据库不支持WITH子句,尽管它是SQL标准。某些数据库可能有别名长度限制,您可以通过添加后缀来超过该限制。

这里有一个系统解决方案,名为“虚拟专用数据库”,用于Oracle数据库:

对于其他数据库,请查看是否有类似的内置解决方案

但是使用WITH子句有一个非常简单的解决方案:

WITH
  tab_a__ AS (SELECT * FROM tab_a WHERE comp="xy"),
  tab_b__ AS (SELECT * FROM tab_b WHERE comp="xy")
SELECT ... //original select
您只需在select中找到所有已使用的表,然后在后面添加
\uuuu
,并将CTE添加到WITH子句中。


注意:有些数据库不支持WITH子句,尽管它是SQL标准。某些数据库的别名长度限制可以通过添加后缀来超过。

您是真的希望客户访问您的数据库服务器,还是希望他们通过网站或应用程序访问数据?什么数据库系统?@zedfoxus始终通过我们的报告系统,因此通过可以在传入选择时更改它们。@PavelGatnar-Any SQL database.added WITH子句solution to my Post您是真的希望客户访问您的数据库服务器还是希望他们访问da