在SQL Server
中,我想创建一个包含多个Schemas
的数据库,每个数据库都与我的应用程序的特定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
在我的应用程序中,我为每个.edmx
创建一个单独的Schema
文件,并且我必须为每个.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" />
我想知道我在做什么是否是实现我想要的最好方法,如果不是,那是更好的方法吗?
您可以直接授予对模式的权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Accounting TO AccountingDataBaseUser;
如果您有多个用户需要访问同一架构,则可以创建数据库角色,并授予该角色上述权限。然后将用户添加到该角色。