OVH Cloud OVH Cloud

Autorisations / Chaine d'appartenance

2 réponses
Avatar
Timur
Bonjour,

[l'exemple est simpliste, mais le principe est là...]


pour des raisons de sécurité, je souhaite limiter l'accès à ma table dbo.T1
par des procédure stockées.

J'ai donc un procédure stockée dbo.T1_select qui contient

SELECT * from dbo.T1

Mon user toto a des droit d'exécution sur dbo.T1_select , mais aucun droit
direct sur la table T1.
Tout fonctionne correctement, la chaine de propriété est respectée.

Si par contre ma proc stoc contient

select @ordresql = 'SELECT * from dbo.T1'
exec(@ordresql)

cela ne fonctionne pas, il faut que je donne des droit explicites sur la
table

Pourquoi ? et comment faire pour s'en sortir sans donner les droits sur la
table ?





--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas

2 réponses

Avatar
Christian Robert
Bonsoir,

En fait pas de chainage de propriété dans le cas de SQL dynamique...

Plusieurs manières d'y palier :

SQL 2005 :
EXECUTE AS 'utilisateur'
dans la définition de la procédure stockée

SQL 2000 et avant :
SETUSER 'utilisateur'
qui permet de changer le contexte d'execution

La solution SQL 2000 n'est cependant accessible qu'au sysadmin ou db_owner.

Sinon pas d'autres choix que d'accorder les droits aux objects.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"Timur" a écrit :

Bonjour,

[l'exemple est simpliste, mais le principe est là...]


pour des raisons de sécurité, je souhaite limiter l'accès à ma table dbo.T1
par des procédure stockées.

J'ai donc un procédure stockée dbo.T1_select qui contient

SELECT * from dbo.T1

Mon user toto a des droit d'exécution sur dbo.T1_select , mais aucun droit
direct sur la table T1.
Tout fonctionne correctement, la chaine de propriété est respectée.

Si par contre ma proc stoc contient

select @ordresql = 'SELECT * from dbo.T1'
exec(@ordresql)

cela ne fonctionne pas, il faut que je donne des droit explicites sur la
table

Pourquoi ? et comment faire pour s'en sortir sans donner les droits sur la
table ?





--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas






Avatar
Pierre Goiffon
Christian Robert wrote:
En fait pas de chainage de propriété dans le cas de SQL dynamique...

Plusieurs manières d'y palier :

SQL 2005 :
EXECUTE AS 'utilisateur'
dans la définition de la procédure stockée

SQL 2000 et avant :
SETUSER 'utilisateur'
qui permet de changer le contexte d'execution

La solution SQL 2000 n'est cependant accessible qu'au sysadmin ou db_owner.

Sinon pas d'autres choix que d'accorder les droits aux objects.



Juste une idée, comme ça, passer par une vue si possible ?