我的 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>
答案1
如果您愿意冒着数据库被黑客下载或删除的风险,那么是的,这就是您需要做的全部。
如果您希望数据库免受各种攻击,那么您将需要创建存储过程来处理数据库中所有数据的插入、更新和删除,然后调用这些存储过程而不是直接访问表。
然后从 db_datareader 和 db_datawriter 固定数据库角色中删除用户。创建一个新角色(您可以随意命名)并让您的用户成为该角色的成员。然后授予该角色对数据库中所有存储过程的执行访问权限。授予角色(或用户)运行存储过程的权限的代码是:
GRANT EXEC ON {ProcedureName} TO {User Or Role Name}
答案2
如果您能做到这一点,mrdenny 的评论非常正确。如果您从头开始开发系统,请使用 SP 并且不要授予对基表/视图的访问权限。
在许多情况下,这不是一个可行的解决方案。如果您的应用程序需要访问基表/视图,请确保它是最小权限。对架构使用单独的权限,而不是 db_datareader 和 db_datawriter。
您的应用程序应该在仅限应用程序的 Windows 登录下运行,并且可能需要被授予对该模式的 SELECT、INSERT、UPDATE、DELETE、EXECUTE 和 REFERENCES 权限。
如果您只需要访问用于报告的表/视图,请在不同的用户下运行报告并授予那用户的CRUD权限。