当用户尝试通过我的ASP MVC 3应用程序中的Windows身份验证连接到SQL Server数据库时,使用以下连接字符串:
<add name="btnintranetContext" connectionString="Data Source=BTN-SERVER;Initial Catalog=Intranet;Integrated Security=SSPI;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
他们收到以下错误:
Cannot open database "Intranet" requested by the login. The login failed.
Login failed for user 'User'.
我理解这意味着什么,这意味着我没有让该用户访问数据库,但我希望用户能够访问数据库而无需向他们提供对它的所有访问权限。我已尝试在连接字符串中指定特定的数据库用户,如下所示:
<add name="btnintranetContext" connectionString="Data Source=BTN-SERVER;Initial Catalog=Intranet;User Id=mylogin;Password=mypassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
但是我收到了一个新错误:
Login failed for user 'mylogin'.
The provider did not return a ProviderManifestToken string.
但我明确知道mylogin可以访问数据库,因为当我尝试使用Windows身份验证连接字符串访问数据库时,它可以工作。但出于安全原因,我不想让每个使用我的应用程序的人访问数据库,这就是我尝试在连接字符串中指定用户的原因。
来自我的web.config文件的其他信息:
<authentication mode="Windows" />
<identity impersonate="true" />
<trust level="Full"/>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
答案 0 :(得分:1)
设置是否可能,并且让运行IIS网站的用户(通常是默认的NETWORK SERVICE)访问数据库。
如果由于某种原因无法将impersonate设置为false,则应使用SQL身份验证。