【问题标题】:Can you Grant select permission to all tables in sql server for a limited time?您可以在有限的时间内授予对 sql server 中所有表的选择权限吗?
【发布时间】:2016-05-31 21:46:36
【问题描述】:

所以我正在做这个 SQL SERVER 学校项目,我想向特定用户添加在有限时间内选择的权利,比如说直到 2016 年 9 月 24 日。 有可能吗?如果可以,怎么做? 谢谢!

【问题讨论】:

  • 您可能拥有上述 3 种不同的 sql server 技术。命名您的服务器并删除其他标签

标签: sql-server


【解决方案1】:

没有规定在有限的时间内授予访问权限。

祝你好运。

【讨论】:

  • 当提到 SQL Server 中的时间相关活动时,你脑海中浮现的一件事就是 SQL Server 代理,我想我已经找到了一种方法来处理这个问题,请参阅我的答案:)
【解决方案2】:

我能想到的唯一方法是创建一个SQL Server Agent Job

  1. 在作业一中创建 2 个步骤,用于将用户添加到数据库角色 db_datareader,然后再执行一个步骤以取消该用户的角色成员资格。

授予用户权限的步骤应该类似于

IF (GETDATE() >= '2016-09-24 08:58:59.000'
    AND GETDATE() <= '2016-09-24 09:01:00.000')
BEGIN
  EXEC sp_addrolemember N'db_datareader', N'UserA'
END

撤销用户权限的第二步应该类似于

IF (GETDATE() >= '2016-09-24 16:58:59.000')
BEGIN
  EXEC sp_droprolemember N'db_datareader', N'UserA'
END
  1. 安排作业每天运行两次。每8小时发生一次。假设您只希望用户访问 8 小时。
  2. 在开始日期和结束日期选项中使用24 September 2016。因此,作业仅在该日期执行,而不会在该日期之前或之后执行。
  3. 确保出现之间的间隔与每个步骤的 IF 语句中的逻辑相匹配。
  4. 作业数据库上下文应该是您的用户需要权限的数据库。

【讨论】:

    【解决方案3】:

    我会写一个在那个日期运行的作业,它会撤销用户的权利。

    我不会修改架构来处理一次性案例。对数据库的权限控制应该在数据库之外。

    【讨论】:

      【解决方案4】:

      您可以创建一个具有 date 数据类型的新列,并将其命名为 endDate。您将 2016 年 9 月 24 日插入用户的 endDate 中,并且(取决于您如何访问它)只需使用 if 语句比较当前日期和结束日期。例如:-

      if(CURDATE() < endDate)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-07
        • 2017-07-06
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 2014-08-10
        • 2011-07-02
        • 2010-09-26
        相关资源
        最近更新 更多