为 CRUD 应用程序访问创建具有有限权限的 SQL Server 登录名和用户

Chr*_*ill 2 security sql-server t-sql

我正在尝试创建一个 SQL 语句来在 SQL Server 中创建一个登录名和用户,这将允许 Web 应用程序对单个数据库执行 crud 操作,并允许完全访问所有表和存储过程、视图等。

我知道如何创建一个登录名和一个用户......但我作为继续的最佳方式离开了我的深度。

CREATE LOGIN [myUser] WITH PASSWORD=N'xxx', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

CREATE USER [myUser] FOR LOGIN [myUser] 
    WITH DEFAULT_SCHEMA = dbo;
GO
Run Code Online (Sandbox Code Playgroud)

Dav*_*ole 5

如果您希望用户能够读取数据库中的任何表和视图,那么您可以从 SQL Server 2012 开始运行以下命令

ALTER ROLE db_datareader ADD MEMBER MyUser;
Run Code Online (Sandbox Code Playgroud)

对于以前的版本,您将运行

sp_addrolemember 'db_datareader','MyUser';
Run Code Online (Sandbox Code Playgroud)

db_datareader 是一个内置角色,它授予对所有内容的读取访问权限。db_datawriter 相当于写入。

如果要授予有限的 CRUD 访问权限,则需要创建一个新角色并使用 GRANT 语句为该角色分配权限。完成后,您可以使用上述语句使您的用户也成为新角色的成员。

CREATE ROLE MyLimitedCRUDRole;
Run Code Online (Sandbox Code Playgroud)

对于您问题的存储过程部分,我将为存储过程访问设置显式角色。我会将其与 MyLimitedCRUDRole 分开,因为 MyLimitedCRUDRole 的可见性在 GDPR 世界中变得越来越重要。

为了清晰起见,我还建议让角色具有明确且单一的目的。

CREATE ROLE db_AllProcExecutor;
GRANT EXECUTE ON MyStoredProc to db_AllProcExecutor;
Run Code Online (Sandbox Code Playgroud)

可以动态生成 GRANT 语句,但在任何具有安全敏感性的数据库上,我都会非常小心地这样做。