限制访问单个数据库中不同模式的最佳方法

问题描述 投票:0回答:1

SQL Server中,我想创建一个包含多个Schemas的数据库,每个数据库都与我的应用程序的特定Domain相关。

我还想创建对每个架构的受限访问,这意味着当用户登录数据库(从应用程序内部的ssmsentityframework登录)时,他/她只能使用以下方式访问数据库中的对象:他/她可以访问的一个特定架构,也可以使用该架构执行所有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=&quot;data source=.;initial catalog=APADataBase;user id=AccountingDataBaseLogin;password=AccountingDataBaseLoginPassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我想知道我在做什么是否是实现我想要的最好方法,如果不是,那是更好的方法吗?

sql sql-server entity-framework database-administration
1个回答
1
投票

您可以直接授予对模式的权限:

 GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Accounting TO AccountingDataBaseUser;

如果您有多个用户需要访问同一架构,则可以创建数据库角色,并授予该角色上述权限。然后将用户添加到该角色。

© www.soinside.com 2019 - 2024. All rights reserved.