gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:16:25 25 4
gpt4 key购买 nike

SQL Server 中,我想创建一个包含多个 Schemas 的数据库,每个 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

在我的应用程序中,我为每个 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=&quot;data source=.;initial catalog=APADataBase;user id=AccountingDataBaseLogin;password=AccountingDataBaseLoginPassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我想知道我正在做的事情是否是实现我想要的目标的最佳方式,如果不是,那更好的方式是什么?

最佳答案

您可以直接向架构授予权限:

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

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

关于sql - 限制对单个数据库中不同模式的访问的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com