用户是否必须与应用程序所在的模式相关联才能在应用程序中使用它?

Do users have to be associated with the schema that app is in, in order to use it in an app?

我在让测试用户帐户访问我们正在编写的新应用程序的数据库时遇到问题。每当我尝试 运行 应用程序时,我都会收到以下错误:

"The underlying provider failed on Open. Login failed for user OURDOMAIN\App.Test_User"

在试图找出问题所在并寻找答案时,我遇到了张贴在这里的这个问题:ADO.NET Connection String。然后我检查了数据库,发现开发团队的默认架构中的每个人都是我们自己的域登录名(不确定那是做什么的),我们都在的数据库角色将我们添加到 db_owner。在我看来,我们可以通过所有内容,而用户的默认模式是 dbo。他们至少还应该有权访问我们的数据库和应用程序使用的其他模式。但是那篇引用的文章说连接字符串不能指定模式。所以我不确定我们如何使用 EF 来实现它。我在这里错过了什么?

您似乎有 Windows 身份验证。这意味着,登录 Windows 的用户会自动登录到数据库。但这并不意味着自动允许此用户在数据库中执行操作。他还必须获得授权。

您可以为此使用默认角色,或者为更复杂的场景创建您自己的角色(并将它们归于用户)。如果您创建自己的角色,则必须授予他们对这些用户可以使用的所有对象的权限。示例:

GRANT SELECT, INSERT, UPDATE, DELETE ON MyTable TO AdvancedUserRole;
GRANT SELECT ON CustomersView TO AdvancedUserRole;

GRANT SELECT ON MyTable TO SimpleUserRole;
GRANT SELECT ON CustomersView TO SimpleUserRole;

如果您使用的是默认角色,则非 db_owner 的用户至少需要 db_reader,如果允许 insert/update 数据,还可能需要 db_writer .