正在处理我的第一个Entity Framework项目。作为项目的一部分,我将创建一些SSRS报告。为了连接到数据库,我需要一个只能访问服务器上特定数据库的Reports用户。在过去,我总是编写一个脚本来添加数据库用户,但我想知道有没有办法可以使用Entity Framework来实现这一点?
答案 0 :(得分:3)
假设您的用户已经在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,您可以在SSMS(数据库>用户>新用户...)中打开添加用户对话框,填写字段,然后单击"脚本"顶部的按钮而不是在底部点击确定。请注意,任何" GO"在将其粘贴到上面的方法之前,需要从生成的脚本中删除这些行。
答案 1 :(得分:1)
您需要告诉EF使用适当的存储过程来执行此操作。你也可以将它们包装在你自己的包含相关命令的sproc中。我知道EF中没有原生的“CreateReportsUser”类型方法。
编辑:我可能应该提供此引用作为“完整”答案。道歉。
以下是您推荐我的建议:How to call Stored Procedure in Entity Framework 6 (Code-First)?