我们希望在我们的软件中构建徒手构建SQL查询的功能(目前无法使用我们的软件执行此操作),但需要能够锁定它以便用户无法进行任何更改,只能从某些表中选择数据。是否有任何好的指南帮助我适当地锁定它(即,需要最少的权限,建议禁用的关键字等)?或者我只是需要继续浏览网页并吸收所有SQL Server安全教程(针对系统本身,而不是编程)?感谢。
答案 0 :(得分:4)
实现此目的的最简单方法是创建一个服务帐户,您将在系统中明确使用该服务帐户进行此动态类型的查询。这个想法是你使用你一直在吸收的所有sql安全性,并在服务器上创建一个非常有限的低级别服务帐户,并使用它来连接数据库。
我建议现在只给他们SELECT访问权限,然后如果用户请求并且在合理范围内,则逐渐释放控制权。
This链接将告诉您如何使用GRANT关键字为登录提供非常具体的帐户安全性。
所以你需要做的就是在sql server中创建一个新帐户,使用基于sql server的安全性,而不是Windows。之后,只需使用上述链接中的信息添加您希望他们拥有该帐户的特定权限。然后将应用程序中的连接字符串切换到该特定功能的新帐户。
任何其他基于编程的安全性都是额外的好处,但仅靠编程解决方案不会像数据库级访问限制那样具有防御性。
答案 1 :(得分:4)
我会去皮带和牙套。
HTH
答案 2 :(得分:3)
为带有“with encryption”标记的SQL Server创建所有对象(视图,表,过程,函数)。 例如: 使用加密创建程序BBBB 如 开始 ... 端强>
此后,用户无法查看源代码,也无法对其进行修改。
答案 3 :(得分:1)
除了专门为这些类型的操作创建最小特权帐户(我更喜欢我的所有用户帐户在某些SP上只有EXEC而在某些实用程序视图上有SELECT - 这通常是初学者),你也可以使用视图使数据尽可能简单并执行某些常见连接。在用户绝对必须提供某种过滤器的情况下,您可以使用存储过程或内联表值函数,例如您不希望它们执行SELECT * FROM视图的日期范围。