【发布时间】:2020-01-15 18:21:18
【问题描述】:
在SQL Server 中,我想创建一个包含多个Schemas 的数据库,每个Domain 都与我的应用程序的特定Domain 相关。
我还想创建对每个模式的受限访问,这意味着当用户登录数据库时(从ssms 或从entityframework 内部应用程序)他/她只能访问数据库中的对象使用他/她可以访问的一个特定架构,并且还可以使用该架构执行所有 ddl/dml 命令。
我想出了以下解决方案:
1- 创建数据库登录
CREATE LOGIN [AccountingDataBaseLogin] WITH PASSWORD='AccountingDataBaseLoginPassword'
2- 为步骤 1 中创建的登录创建数据库用户。
CREATE USER [AccountingDataBaseUser] FOR LOGIN [AccountingDataBaseLogin]
3- 创建架构:
BEGIN
EXECUTE('CREATE SCHEMA Accounting AUTHORIZATION AccountingDataBaseUser')
ALTER USER AccountingDataBaseUser WITH DEFAULT_SCHEMA = Accounting
ALTER AUTHORIZATION ON SCHEMA::Accounting TO AccountingDataBaseUser;
GRANT CREATE TABLE TO AccountingDataBaseUser;
GRANT CREATE VIEW TO AccountingDataBaseUser;
GRANT CREATE PROCEDURE TO AccountingDataBaseUser;
GRANT CREATE TYPE TO AccountingDataBaseUser;
GRANT CREATE FUNCTION TO AccountingDataBaseUser;
GRANT CREATE DEFAULT TO AccountingDataBaseUser;
END
在我的应用程序中,我为每个 Schema 创建了一个单独的 .edmx 文件,并且我必须为每个 .edmx 创建一个不同的连接字符串,如下所示:
<add name="AccountingDataBaseEntities" connectionString="metadata=res://*/ModelDesigners.Accounting.AccountingDataBaseModel.csdl|res://*/ModelDesigners.Accounting.AccountingDataBaseModel.ssdl|res://*/ModelDesigners.Accounting.AccountingDataBaseModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=APADataBase;user id=AccountingDataBaseLogin;password=AccountingDataBaseLoginPassword;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
我想知道我正在做的事情是否是实现我想要的最佳方式,如果不是,什么是更好的方式?
【问题讨论】:
标签: sql sql-server entity-framework database-administration