【问题标题】:Read only queries Using ADO.NET使用 ADO.NET 的只读查询
【发布时间】:2019-01-18 18:57:47
【问题描述】:

我想将应用程序限制为只读查询。换句话说,我希望应用程序只处理那些不改变数据库状态的查询。我正在使用 ADO.NET。我不想针对具有只读权限的数据库创建新用户。欢迎提出任何建议。

【问题讨论】:

  • 为什么不想创建一个新用户?这才是真正做到这一点的方法,除非您对应用程序代码有 100% 的控制权,并且可以确保不会通过它执行任何数据更改语句。
  • 最好、最安全、最简单的方法是将应用程序使用的数据库用户限制为只读。甚至还有一个名为db_denydatawriter 的内置角色,它会自动拒绝拥有它的用户对任何数据库对象的写入权限。
  • 数据库是外部数据库,不允许创建新的数据库用户(我们没有权限创建新的数据库用户)。我正在使用 Windows 身份验证。

标签: c# sql sql-server ado.net


【解决方案1】:

选项 1:SQL 身份验证

您可以使用如下所示的连接:

Server ={serverName}; Initial Catalog = {DB_Name}; User Id={uid}; Password={pwd};

使用在数据库中只有读取权限的 uid。

选项 2:Windows 身份验证

如果您想使用 Integrated Security = True;(即 windows 身份验证),那么您必须授予 windows 用户只读访问权限(程序在该用户下运行)。

希望这会有所帮助。

【讨论】:

  • 感谢您的回复。应用程序正在使用 Windows 身份验证并在管理员(即 Windows 用户)的范围内运行。管理员拥有所有权限,我们无法更改权限级别。如果,数据库甚至不允许我们创建具有只读权限的新数据库用户怎么办。有什么想法吗?
【解决方案2】:

您可以创建触发器以通过数据库级​​别的触发器取消任何插入更新或删除。触发器将以回滚结束以取消事务。您必须弄清楚是谁触发了触发器,以便其他用户可以更新数据库。

我不会这样做 - 我会从用于应用程序的帐户中删除任何权限(选择除外)。我创建了很多很多触发器,但我从未听说有人使用数据库触发器来强制只读。

【讨论】:

  • 应用程序正在使用 Windows 身份验证并在管理员范围内运行。因此,它拥有所有的权限并且可以执行所有的查询。该数据库是一个外部数据库,它不允许我们创建具有只读权限的新数据库用户。在不创建新的数据库用户、更改现有 Windows 用户的权限级别的情况下执行此操作的任何想法。
猜你喜欢
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多