我有一个连接string在我的asp.net代码看SQL Server 2005数据库。 我创build了一个名为WebUser的用户名,并在SQL Server 2005中授予他db_datawriter和db_datareader。在login和数据库下,用户必须能够读取并能够更新? 这是我所需要的还是正确的事情?
连接string将如下所示。
<add name="ConnectionStringName" connectionString="DataSource=localhost; Initial Catalog=DBName;User ID=WebUser; Password=mypassword; Integrated Security=FALSE" providerName="System.Data.SqlClient"/> </connectionStrings>
你想冒着被黑客下载或删除的数据库的风险,那么你只需要这么做。
如果你希望你的数据库能够抵御各种攻击,那么你需要创build存储过程来处理数据库中所有数据的插入,更新和删除操作,然后调用这些存储过程而不是访问表直。
然后从db_datareader和db_datawriter固定数据库angular色中删除用户。 创build一个新的angular色(你可以称之为任何你喜欢的angular色),并让你的用户成为这个angular色的成员。 然后授予该angular色对数据库中的所有存储过程的执行权限。 授予angular色(或用户的权限)的代码运行存储过程的权限是:
GRANT EXEC ON {ProcedureName} TO {User Or Role Name}
mrdenny的评论是相当真实的,如果你能做到这一点。 如果您从头开始开发系统,请使用SP,并且不要授予对基本表/视图的访问权限。
在很多情况下,这不是一个可行的解决scheme。 如果您的应用程序需要访问基本表/视图,请确保它是最低权限。 在架构上使用单独的权限而不是db_datareader和db_datawriter。
您的应用程序应该在仅应用程序的Windowslogin名下运行,并且可能需要将SELECT,INSERT,UPDATE,DELETE,EXECUTE和REFERENCES授予该模式。
如果您只需要访问表格/视图进行报告,请在不同的用户下运行报告,并向该用户授予CRUD权限。