J'ai besoin de limiter l'accès à un utilisateur particulier, mais ils doivent toujours pouvoir voir les données dans les tables appartenant à dbo.
J'essaie de faire ce qui suit:
- le schéma dbo fonctionne normalement, a accès à tout
- le schéma schema1 n'a accès qu'aux objets schema1
- si une vue schema1 ou une procédure stockée accède aux données des tables appartenant à dbo, la chaîne d'autorisations est appropriée
- user1 a accès au schéma1, et rien d'autre; sauf dans le cas de # 3
Voici ce que j'ai essayé:
- Créer un utilisateur user1 mappé à une connexion de test avec un mot de passe aléatoire
- Création de quelques tables dans le schéma dbo avec des données de test
- Créé un schéma schema1
- Créé un schéma_get_profiles qui sélectionne dans une vue appelée schema1.profiles qui accède aux données dans dbo.people, dbo.taglinks et dbo.tags
Cependant, en utilisant l'instruction suivante lorsque vous êtes connecté en tant qu'utilisateur1:
EXEC get_profiles 1
résulte en:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
J'ai essayé WITH EXECUTE AS OWNER
et je ne peux pas commencer à comprendre comment le "chaînage de propriété" est censé fonctionner.
J'ai aussi essayé
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
mais j'obtiens l'erreur suivante (en dépit d'être un utilisateur avec un accès de niveau dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Ce dont j'ai besoin, c'est user1 pour pouvoir accéder aux données via les procédures stockées que je leur donne, et rien d'autre.
En outre, cela est destiné à éventuellement vivre sur une base de données SQL Azure existante, mais je teste d'abord une base de données factice locale.