【问题标题】:How can I allow users sql access to a table limited to certain rows?如何允许用户 sql 访问仅限于某些行的表?
【发布时间】:2013-06-03 04:51:05
【问题描述】:

我正在构建一个证券交易所模拟游戏。我有一个名为“Market_data”的表,在游戏中玩家模拟特定日期,并允许使用 SQL 查询来检索历史数据并计划他们的行动过程。我的困难是我需要根据他们正在播放的当前日期限制他们可以访问的行,这样他们就看不到日期大于当前日期的行。

例如:一个用户正在运行游戏,并且当前是 2010 年,如果他执行像 "SELECT * FROM market_data" 这样的简单选择,我不希望他看到日期 > 'x-x-2010' 的行

我知道的唯一解决方案是解析用户的 SQL 并添加 WHERE 子句以删除较新的日期,但这似乎很耗时且容易出错,我不确定是否有更好的选择。任何关于如何做到这一点的想法都将受到感谢。

【问题讨论】:

  • 抱歉,x-x-2010 是什么意思?如果是 2010-06-01,这里只能看到日期
  • 你试过什么?听起来您需要让系统验证 SQL 查询并附加/修改 where 子句。如果有的话,您可能需要构建一个像 SQL select 这样的向导。

标签: mysql sql limit


【解决方案1】:

解决方案是 SQL 视图,使用视图有几个不同的原因:

*1.*隐藏数据复杂性。您可能希望提供一个运行通常请求的 SQL 语句的视图,而不是强迫您的用户学习 T-SQL JOIN 语法。

*2.*保护数据。如果您的表格在某些列中包含敏感数据,您可能希望对某些用户组隐藏这些列。例如,客户姓名、地址和他们的社会保险号可能都存储在同一个表中;但是,对于运输文员等较低级别的员工,您可以创建一个仅显示客户姓名和地址的视图。您可以授予视图权限,而不允许用户查询基础表。您可能希望通过以下几种方式来保护您的数据:

a.创建一个视图以允许仅读取表中的某些列。一个常见的例子是雇员表中的薪水列。您可能不希望所有人员都能够阅读经理或彼此的薪水。这称为对表进行垂直分区,并通过在 CREATE VIEW 语句中仅指定适当的列来完成。

b.创建一个视图以允许仅读取表中的某些行。例如,您可能有部门经理的视图。这样,每个经理只能向其部门的员工提供加薪。这称为水平分区,通过在创建视图的 SELECT 语句中提供 WHERE 子句来实现。

*3.*执行一些简单的业务规则。例如,如果您希望生成需要接收秋季目录的客户列表,您可以创建以前在秋季购买过您的衬衫的客户的视图。

*4.*使用 BCP 导出数据。如果您使用 BCP 将 SQL Server 数据导出为文本文件,则可以通过视图格式化数据,因为 BCP 的格式化能力非常有限。

*5.*自定义数据。如果您希望显示一些计算值或列名的格式与基表列不同,您可以通过创建视图来实现。

参考来自http://sqlserverpedia.com

【讨论】:

  • 链接已失效:/ 还有其他关于 SQL 视图的深度资源吗?
【解决方案2】:

1)您可以使用带有自定义规则限制访问的mysql代理http://dev.mysql.com/downloads/mysql-proxy/

2)你可以使用存储过程/函数

3)你可以使用视图

【讨论】:

    【解决方案3】:

    基本方法是:

    -> 阻止该用户(或组)访问基表。

    -> 在该表的顶部定义一个视图,该视图仅显示这些用户应该看到的行。

    -> 授予这些用户对视图的 SELECT 权限。

    ->你也可以使用SQL加密、解密和散列的概念。

    可以在此处找到加密和解密示例:

    http://msdn.microsoft.com/en-us/library/ms179331.aspx

    哈希示例可以在这里找到:

    http://msdn.microsoft.com/en-us/library/ms174415.aspx

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2014-06-15
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多