为Entity Framework创建权限受限的登录名与用户问题咨询
Entity Framework 受限权限账号配置方案
1. SQL Server 账号创建与权限分配
1.1 创建登录名
CREATE LOGIN [EF_Limited_Login] WITH PASSWORD = N'设置你的强密码', DEFAULT_DATABASE = [你的业务数据库名称], CHECK_EXPIRATION = OFF, CHECK_POLICY = ON; GO
1.2 创建数据库映射用户
切换到你的业务数据库执行以下语句:
USE [你的业务数据库名称]; GO CREATE USER [EF_Limited_User] FOR LOGIN [EF_Limited_Login]; GO
1.3 分配基础CRUD权限
以下权限可以满足EF普通增删改查操作需求:
-- 授予查询权限 GRANT SELECT ON SCHEMA::[dbo] TO [EF_Limited_User]; GO -- 授予插入权限 GRANT INSERT ON SCHEMA::[dbo] TO [EF_Limited_User]; GO -- 授予更新权限 GRANT UPDATE ON SCHEMA::[dbo] TO [EF_Limited_User]; GO -- 授予删除权限 GRANT DELETE ON SCHEMA::[dbo] TO [EF_Limited_User]; GO
如果你的业务使用非dbo的自定义Schema,将上述语句中的[dbo]替换为对应Schema名称即可
1.4 额外权限(按需开启)
如果你的项目使用EF Code First迁移功能,需要额外授予以下权限,无迁移需求可以跳过:
-- 授予架构修改权限 GRANT ALTER ON SCHEMA::[dbo] TO [EF_Limited_User]; GO -- 授予创建表权限 GRANT CREATE TABLE TO [EF_Limited_User]; GO
如果项目用到了自定义存储过程,新增执行权限即可:
GRANT EXECUTE ON SCHEMA::[dbo] TO [EF_Limited_User]; GO
2. EF 连接字符串配置
2.1 EF6(.NET Framework)配置
修改配置文件中的连接字符串:
<connectionStrings> <add name="你的DbContext名称" connectionString="Data Source=SQL服务器地址;Initial Catalog=你的业务数据库名称;User ID=EF_Limited_Login;Password=你设置的强密码;Integrated Security=False;" providerName="System.Data.SqlClient" /> </connectionStrings>
2.2 EF Core(.NET Core/.NET 5+)配置
修改appsettings.json中的连接配置:
{ "ConnectionStrings": { "你的DbContext名称": "Server=SQL服务器地址;Database=你的业务数据库名称;User Id=EF_Limited_Login;Password=你设置的强密码;TrustServerCertificate=True;" } }
3. 权限验证
配置完成后可依次做以下校验:
- 执行业务常规增删改查操作,确认功能正常
- 尝试执行删除表、修改服务器配置等高权限操作,确认抛出权限不足错误,符合安全预期
内容的提问来源于stack exchange,提问作者user3166024
相关产品推荐
相关产品推荐

