[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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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 ?
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 ?