1

我有一个连接到 SQL Server 2008 以存储一些数据的 .NET 应用程序。我使用 SQL Server 身份验证向app.config文件中的最终用户提供 sq 用户名和密码。如果需要更改更多内容,我会向最终用户提供一些其他凭据。

如何将 sql 用户限制为仅具有读/写数据和执行现有存储过程以及其他一切被禁止的权限?为应用程序用于连接数据库的 sql 用户设置权限的最佳做法是什么?我可以以某种方式阻止用户登录 Management Studio 并弄乱我的数据吗?我不是在寻找完美的 100% 可靠的解决方案,而是寻找现有的最佳实践来做到这一点。非常感谢您提前。

更新:我在共享托管 SQL Server 环境中工作。

4

3 回答 3

4

您需要创建一个新的 SQL 用户,例如“LimitedUser”。要在 SSMS 中执行此操作,请选择您正在使用的服务器的安全文件夹,右键单击,选择新建,然后选择登录。

选择您的身份验证类型(SQL 服务器身份验证很容易管理),并将默认数据库设置为您的数据库。

您需要设置服务器角色,以便此新用户仅映射到您的数据库,并在最后一页(状态)中,将登录设置为 false,以便他们无法使用这些凭据登录 SSMS 并“弄乱您的数据”。

单击“确定”,您就完成了受限用户的创建。

将其分配给您的数据库,然后在 SSMS 中,右键单击您的数据库,选择属性、权限。

选择您的用户或角色,然后在下面的权限网格中,仅打开需要打开的内容。

于 2012-03-13T06:53:45.113 回答
0

在多个客户之间共享单个实例的共享 SQL Server 托管与典型的客户端-服务器应用程序不兼容。您应该通过中间层服务器(例如 WCF 数据服务)执行所有操作,并在具有表单身份验证等的表中维护数据库中的用户帐户。

对于您的客户端-服务器应用程序,您需要使用您自己的 SQL 服务器实例进行 VPS 托管,您可以在其中创建服务器级登录。如果不创建服务器级登录,就没有保护客户端-服务器应用程序的方法。任何解决方法都只是伪安全。

于 2013-05-07T11:40:23.127 回答
0

如我所见,您的问题完全与 SQL 服务器安全有关。

您可以使用GRANT语句、服务器或数据库角色来限制用户对服务器、数据库或对象范围的权限。例如,您可以为用户分配 db_datareader 角色,然后为该用户授予某些存储过程(或整个数据库)的 EXECUTE 权限。

我的组织当前的做法是创建数据库角色(例如应用程序管理员、操作员等),为这些角色添加适当的权限,然后将这些角色分配给数据库用户。

我不完全确定您是否可以阻止登录 SQL Server Managent Studio (SSMS),但 SSMS 不会显示对于具有用户当前权限的用户必须不可见的信息。

于 2012-03-13T07:13:43.910 回答