【发布时间】:2016-01-12 16:15:39
【问题描述】:
一直致力于我的第一个实体框架项目。作为项目的一部分,我将创建一些 SSRS 报告。为了连接到数据库,我需要一个 Reports 用户,该用户只能访问服务器上的特定数据库。过去我总是编写一个脚本来添加数据库用户,但我想知道有没有一种方法可以使用实体框架来代替?
【问题讨论】:
标签: sql-server asp.net-mvc entity-framework entity-framework-6
一直致力于我的第一个实体框架项目。作为项目的一部分,我将创建一些 SSRS 报告。为了连接到数据库,我需要一个 Reports 用户,该用户只能访问服务器上的特定数据库。过去我总是编写一个脚本来添加数据库用户,但我想知道有没有一种方法可以使用实体框架来代替?
【问题讨论】:
标签: sql-server asp.net-mvc entity-framework entity-framework-6
假设您的用户已经在 SQL Server 级别定义了登录名(安全 > 登录名),您可以从数据库初始化程序种子方法中调用以下方法将用户添加到数据库:
private void AddDbUser(MyDataContext myDB)
{
string accountDomainName = "AccountDomainName"; // replace with user's login domain
string accountLoginID = "AccountLoginID"; // replace with user's login ID
string sql =
"USE [MyDB]" +
"CREATE USER [MyNewUser] FOR LOGIN [" + accountDomainName + "\\" + accountLoginID + "]" +
"ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [" + accountLoginID + "]" +
"ALTER AUTHORIZATION ON SCHEMA::[db_datawriter] TO [" + accountLoginID + "]" +
"EXEC sp_addrolemember N'db_datawriter', N'" + accountLoginID + "'" +
"EXEC sp_addrolemember N'db_datareader', N'" + accountLoginID + "'";
myDB.Database.ExecuteSqlCommand(sql);
}
所需的确切 SQL 取决于您的配置。要让 SQL Server 为您的方案生成 SQL,您可以在 SSMS 中打开添加用户对话框(数据库 > 用户 > 新用户...),填写字段,然后单击顶部的“脚本”按钮而不是点击好的在底部。请注意,在将生成的脚本粘贴到上述方法之前,需要从生成的脚本中删除任何“GO”行。
【讨论】:
您需要告诉 EF 使用适当的存储过程来执行此操作。您还可以将它们包装在您自己的包含相关命令的存储过程中。据我所知,EF 中没有原生的“CreateReportsUser”类型方法。
编辑:我可能应该提供此参考作为“完整”答案。道歉。
以下是我推荐的方法:How to call Stored Procedure in Entity Framework 6 (Code-First)?
【讨论】: