我的 asp.net 代码中有一个连接字符串,用于查看 SQL Server 2005 数据库。我创建了一个名为 WebUser 的用户名,并在 SQL Server 2005 中授予他 db_datawriter 和 db_datareader。无论是在登录下还是在数据库下,用户都必须能够阅读并能够进行更新?这是我所需要的还是正确的做法?
连接字符串将如下所示。
<add name="ConnectionStringName" connectionString="DataSource=localhost;
Initial Catalog=DBName;User ID=WebUser; Password=mypassword;
Integrated Security=FALSE"
providerName="System.Data.SqlClient"/>
</connectionStrings>
如果您希望冒着被黑客下载或删除数据库的风险,那么您需要做的就是这样做。
如果您希望您的数据库免受各种攻击,那么您需要创建存储过程来处理数据库中所有数据的插入、更新和删除,然后调用这些存储过程而不是访问表直接地。
然后从 db_datareader 和 db_datawriter 固定数据库角色中删除用户。创建一个新角色(您可以随意称呼它)并使您的用户成为该角色的成员。然后授予该角色对数据库中所有存储过程的执行权限。授予角色(或用户)访问以运行存储过程的代码是:
如果你能做到的话,mrdenny 的评论是完全正确的。如果您从头开始开发系统,请使用 SP 并且不要授予对基表/视图的访问权限。
在许多情况下,这不是一个可行的解决方案。如果您的应用需要访问基表/视图,请确保它是最低权限。对模式使用单独的权限,而不是使用 db_datareader 和 db_datawriter。
您的应用程序应该在仅限应用程序的 Windows 登录下运行,并且可能需要授予架构的 SELECT、INSERT、UPDATE、DELETE、EXECUTE 和 REFERENCES 权限。
如果您只需要访问用于报告的表/视图,请在不同的用户下运行报告并授予该用户 CRUD 权限。