2009-09-17 95 views
0

我有一个客户端 - 服务器应用程序,其中.NET客户端访问SQL Server 2008数据库中的所有数据和存储过程。SQL Server 2008数据保护

有什么办法保护所有这些数据,以便只有我创建和授权的用户才能访问这个特定的数据库?特别是用户'sa'想起来了。我不喜欢他访问我所有的数据。

回答

7

您不能阻止系统管理员访问数据,您也不应该。

但是,除指定的dba外,没有人应该拥有sa帐户的密码。如果sa没有密码或许多人拥有密码,请立即更改密码。如果应用程序通过sa访问,请立即更改。

除此之外,您可以最好地限制访问权限是从表和视图(包括选择访问)中删除对所有其他帐户的访问权限,并且只允许通过存储的特效进行exec访问。这样,除了指定的管理员以外,任何人都只能对已存储的特效做其他事情。但是,如果您在应用程序或存储的特效库中使用了任何动态SQL,则无法执行此操作,这是动态SQL为什么不可行的一个原因。

+0

因此,如果用户在某个表上没有SELECT访问权限,但在对该表执行SELECT操作的存储过程具有EXEC访问权限,那么用户可以看到数据? – 2009-09-17 14:00:32

+0

是的,但只能通过存储过程。 – MartW 2009-09-17 14:02:08

+0

是的,你是对的。 – 2009-09-17 14:03:09

3

您无法阻止sa或其他系统管理员,因为对整个系统的访问对他们的角色是不可或缺的。 您可以尝试对数据进行加密,使其在应用程序之外没有任何意义,但它可能会使将来的报告需求变得复杂。

+0

加密不是一个真正的选择,因为那样我就不得不调整整个应用程序(我猜)。另外,我相信会有性能损失。还是谢谢你的答案。 – Marc 2009-09-17 15:02:48

相关问题