private void CreateDatabaseRoles(OdsSqlConfiguration odsSqlConfiguration, CloudOdsDatabaseSecurityConfiguration securityConfiguration)
 {
     foreach (var role in securityConfiguration.Users.SelectMany(u => u.Roles).Distinct())
     {
         CreateDatabaseRole(odsSqlConfiguration, securityConfiguration, role);
     }
 }
        public void RemoveConfiguration(OdsSqlConfiguration sqlConfiguration, CloudOdsDatabaseSecurityConfiguration securityConfiguration)
        {
            var databaseName = _cloudOdsDatabaseNameProvider.GetDatabaseName(securityConfiguration.TargetDatabase);

            foreach (var user in securityConfiguration.Users)
            {
                RunSqlProcessOnDatabase(databaseName, sqlConfiguration, (connection, configuration) =>
                {
                    RemoveUserFromRole(connection, configuration.AdminAppCredentials, user.Roles.ToArray());
                });
            }
        }
        private void CreateDatabaseRole(OdsSqlConfiguration odsSqlConfiguration, CloudOdsDatabaseSecurityConfiguration securityConfiguration, ISqlRole role)
        {
            var databaseName = _cloudOdsDatabaseNameProvider.GetDatabaseName(securityConfiguration.TargetDatabase);

            if (!role.IsBuiltinRole)
            {
                RunSqlProcessOnDatabase(databaseName, odsSqlConfiguration, (connection, configuration) =>
                {
                    _rawSqlConnectionService.ExecuteDdl(connection, role.CreateSql);
                });
            }
        }
        public void ApplyConfiguration(OdsSqlConfiguration sqlConfiguration, CloudOdsDatabaseSecurityConfiguration securityConfiguration)
        {
            var databaseName = _cloudOdsDatabaseNameProvider.GetDatabaseName(securityConfiguration.TargetDatabase);

            RunSqlProcessOnDatabase(databaseName, sqlConfiguration, (connection, configuration) =>
            {
                CreateDatabaseRoles(sqlConfiguration, securityConfiguration);

                foreach (var user in securityConfiguration.Users)
                {
                    AddUserToDatabase(connection, user.UserCredential);
                    AddUserToRole(connection, user.UserCredential, user.Roles.ToArray());
                }
            });
        }