SQL_permission_checks_addition

Snippet Name: SQL_permission_checks_addition

Tags:

Created Date: 2025-06-16 13:12:42
Last Modified Date: 2025-05-31 10:31:36

Dependencies:

DBA Notes:

Sample Output:

Title: SQL permission checks addition
Author: user
I have a large number of statements which grant permisisosn in SQL Servr. i want you to add a statement to each that checks if exists(select * from sys.database_principals WHERe name = ?) to each one: #################################################################################################
 2024-05-08 12:13:17.187 MachineName:S1WSVSQLDX1.US1.autonation.com; ComputerBiosName:S1WSVSQLDX1; 10.10.200.36 | 48255 
 ApplicationName: NDD | AppEmailGroup: DL-CORP-IT-BusinessIntelligence@autonation.com | ServerUptime[dd:hh:mm:ss]: 26:09:45:13
 Cname: NDDSTGDB01.US1.autonation.com,48255;  LoginName: US1\svc_sqltaskrunner Authorization Scheme: NTLM S1WSVSQLDX1
 Context: S1WSVSQLDX1.US1.autonation.com,48255; Database:master; Version: [SQL 2019 || 15.0.4355.3] Enterprise Edition: Core-based Licensing (64-bit)
#################################################################################################
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
GO
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_dw_etl] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_dw_etl] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_ssas] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_dw_etl] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_dw_etl] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_eCommerce] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_dw_etl] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_dw_etl] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_SQL] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD_Jobs] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_DMSDataLake] 
GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [ASIEncryption] 

GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [ASIEncryption] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_eCommerce] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\dfscorpITBusinessIntelligence] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_DMSDataLake] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_dw_etl] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_ssas] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD_Jobs] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_SQL] 
GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd]

Author: ChatGPT
To add the check if a principal (user or role) exists in the database before granting permissions, you can use an `IF EXISTS` clause with a conditional block around each `GRANT` statement. Below is your modified SQL script incorporating these checks for each principal mentioned in the `GRANT` statements:

```sql
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
GO

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NDD')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD];
END

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'US1\dfscorpITBusinessIntelligence')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\dfscorpITBusinessIntelligence];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\dfscorpITBusinessIntelligence];
END

-- Repeat similar blocks for each user or role
-- Example for another user
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'_dw_etl')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_dw_etl];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_dw_etl];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_dw_etl];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_dw_etl];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_dw_etl];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_dw_etl];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_dw_etl];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_dw_etl];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_dw_etl];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_dw_etl];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_dw_etl];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_dw_etl];
END

-- Continue with the other principals similarly
```

Each block checks for the existence of a specific database principal and if found, executes the `GRANT` statements associated with that principal. You need to replicate similar blocks for each user or role mentioned in your original script. Adjust the names in the `IF EXISTS` condition accordingly to match the principal's name in your environment. This approach helps prevent errors that occur when trying to grant permissions to non-existing users or roles in the database.

Author: user
continue

Author: ChatGPT
Sure, I will continue adding the checks for the other users and roles specified in your original SQL permissions script. Here's how the script can be extended:

```sql
-- Checks and grants for user [US1\_SQL]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'US1\_SQL')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_SQL];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_SQL];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_SQL];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_SQL];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_SQL];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_SQL];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_SQL];
END

-- Checks and grants for user [NDD_Jobs]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NDD_Jobs')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [NDD_Jobs];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [NDD_Jobs];
END

-- Checks and grants for user [US1\_ssas_ndd_prd]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'US1\_ssas_ndd_prd')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [US1\_ssas_ndd_prd];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [US1\_ssas_ndd_prd];
END

-- Continue with other users or roles as necessary
```

This script pattern ensures that permissions are granted only to existing database principals, helping to maintain a clean and error-free security configuration in your SQL Server environment. Remember to adjust the principal names if there are variations in their actual names in your database.

Author: user
continue

Author: ChatGPT
Certainly! Let's continue by adding the checks and permissions for additional principals from your original list:

```sql
-- Checks and grants for user [_DMSDataLake]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'_DMSDataLake')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [_DMSDataLake];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_DMSDataLake];
END

-- Checks and grants for user [_ssas]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'_ssas')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [_ssas];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [_ssas];
END

-- Checks and grants for user [_eCommerce]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'_eCommerce')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [_eCommerce];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [_eCommerce];
END

-- Checks and grants for user [ASIEncryption]
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'ASIEncryption')
BEGIN
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [ASIEncryption];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [ASIEncryption];
END

-- Add similar IF EXISTS checks and GRANT statements for any additional users or roles not covered yet
```

This script continues the pattern of ensuring that permissions are only granted to existing principals in the database. Each `IF EXISTS` block checks a specific principal's existence before granting them the respective permissions on certificates and symmetric keys.

For a complete implementation, you would need to ensure all users or roles listed in your original SQL commands are accounted for with a corresponding `IF EXISTS` block. This approach minimizes the risk of SQL errors due to non-existent database principals when executing the script.

Author: user
continue

Author: ChatGPT
Certainly! Let's finalize the script by covering any additional users or roles that may not have been included in the previous blocks. This would include a comprehensive wrap-up ensuring no user or role is left without the appropriate existence checks:

```sql
-- Additional Checks and Grants for hypothetical users or roles if any are left
-- Example for a generic user [UserExample] that you might want to add:
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'UserExample')
BEGIN
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [UserExample];
    GRANT VIEW DEFINITION ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [UserExample];
    GRANT CONTROL ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [UserExample];
    GRANT VIEW DEFINITION ON CERTIFICATE::CARFAX_DATA_CERTIFICATE TO [UserExample];
    GRANT CONTROL ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [UserExample];
    GRANT VIEW DEFINITION ON CERTIFICATE::ASI_PI_DATA_CERTIFICATE TO [UserExample];
    GRANT CONTROL ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [UserExample];
    GRANT CONTROL ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [UserExample];
    GRANT CONTROL ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [UserExample];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::ASI_PI_DATA_SYMMETRIC_KEY TO [UserExample];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CARFAX_DATA_SYMMETRIC_KEY TO [UserExample];
    GRANT VIEW DEFINITION ON SYMMETRIC KEY::CFS_DATA_SYMMETRIC_KEY TO [UserExample];
END

-- Ensure all roles are covered similarly. If there are more roles or users in your system not covered here, add similar blocks.

-- It's a good practice to log or notify when a principal does not exist, which can be done with an ELSE clause in each IF block
-- Example for error handling:
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NonExistentUser')
BEGIN
    -- Grant statements
    GRANT CONTROL ON CERTIFICATE::CFS_DATA_CERTIFICATE TO [NonExistentUser];
END
ELSE
BEGIN
    PRINT 'The principal NonExistentUser does not exist in the database.';
    -- Optionally, log this information to a table or an external logging service
END

-- Final remarks
PRINT 'Permissions updates are completed. Verify the logs for any errors or notifications about non-existent principals.';
```

This comprehensive script includes:
- **Conditional Checks**: `IF EXISTS` for each user or role before granting permissions.
- **Error Handling**: Using an `ELSE` clause to print a message or log an error when a principal does not exist. This can be extended to more sophisticated logging depending on your environment.
- **Final Notification**: A print statement at the end to signify the completion of the script.

Please make sure to review all principal names for accuracy and ensure they exactly match those in your SQL Server's `sys.database_principals`. This script helps maintain a clean, error-free permissions setup by confirming each principal's existence before modifying their privileges.


Leave a Reply