
Estoy creando una aplicación multiinquilino que utilizará una única base de datos con múltiples esquemas. Cada inquilino tendrá su propio nombre de usuario/contraseña respectivo. Pude restringir los permisos de visualización a un esquema específico.
El único problema con el que me sigo encontrando es al actualizar los esquemas. Actualmente, inicio sesión con mi código C# utilizando las credenciales de esquema adecuadas y luego ejecuto el código SQL cada vez que quiero actualizar un esquema específico (o todos).
Al principio, intenté modificar la tabla y luego me di cuenta de que no tenía suficientes permisos. Entonces modifiqué los permisos nuevamente. Ahora, estoy intentando agregar indexación de texto completo en todos los esquemas y me dice que no tengo permisos.
Mi pregunta es simple: ¿cómo puedo definir los permisos de un usuario para the database owner for a specific schema
no tener ningún problema con ningún script que se ejecute en la base de datos?
Respuesta1
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
otorgará todos los permisosaplicable a esquemas y objetos contenidos en esquemas. Sin embargo, no otorgará ningún permiso aplicable a objetos que no sean de esquema. Por ejemplo, no se aplica a los catálogos de texto completo, que sonnoobjetos vinculados a esquema (no se especifica un esquema al crear un catálogo FT) y que requieren un CREATE FULLTEXT CATALOG
permiso especial.
En su caso, debe revisar todo su modelo de seguridad y decidir qué permisos y acciones se requieren/permiten para sus inquilinos. No existe una respuesta única y sencilla. Si otorga a sus inquilinos la libertad de actuar como un db_owner completo, entonces debe otorgarles una base de datos verdadera. No podrás introducir un esquema y pretender que es una base de datos. El modelo de seguridad de SQL simplemente no funciona así, y es mejor seguirle el juego en lugar de intentar eludirlo.
Respuesta2
No creo que sea posible. Si son dbo, pueden hacer cualquier cosa necesaria en esa base de datos. Si no son dbo, son limitados. Propietario de la base de datos significa precisamente eso: el propietario de esa base de datos.