J'ai un client qui a un 'access refusé' à un appel à xp_regread (essayant de find le path de la database), mais je n'arrive pas à le reproduire. J'ai essayé d'exécuter ce qui suit
REVOKE execute on xp_regread to public
Mais ça marche toujours. J'ai également trouvé quelques articles sur des problèmes de SQL Server 2000 (http://support.microsoft.com/kb/887165) mais le server de clients est 2005. Toutes les idées sur la façon de résoudre ce problème.
Edit: J'ai essayé ce qui suit
USE MASTER GO REVOKE execute on xp_regread to public GO DECLARE @InstanceName nvarchar( 128 ) SET @InstanceName = ISNULL( CONVERT( nvarchar( 128 ), SERVERPROPERTY( 'InstanceName' ) ), N'MSSQLSERVER' ) DECLARE @InstanceKey nvarchar( 128 ) EXECUTE master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL\', @InstanceName, @InstanceKey OUTPUT print @InstanceName print @InstanceKey
Mais ça marche toujours. Pour être clair, j'essaie de reproduire un problème où l'appel ne fonctionne pas. La révocation des permissions était une façon que je lisais devrait le faire, mais cela fonctionne toujours pour moi.
C'est une procédure stockée étendue qui a donc besoin
EXEC master..xp_regread ...
Ensuite, ce serait
USE master GO GRANT EXECUTE ON xp_regread TO public GO
Si un DENY explicite a été défini, REVOKE le supprimera. Ce n'est pas la même chose que GRANT. Cela ne s'applique qu'à un user normal.
Toute personne ayant des droits sysadmin ou db_owner dans master (sa est dbo dans master) contournera les permissions de toute façon
Vous devriez explicitement DENY
la permission:
GRANT DENY ON xp_regread TO XYuser.
Faites attention cependant, cela pourrait causer des problèmes plus tard. Comme la boîte de dialog de sauvegarde dans SSMS ne fonctionnera pas pour cette personne.
Pour reproduire le problème, vous devez d'abord faire la différence entre deux erreurs différentes: "Accès refusé". et 'L'autorisation EXECUTE a été refusée'.
La première erreur est due à un problème de configuration sur un user non sysadmin. La seconde est due à l'absence d'autorisation d'exécution sur la procédure étendue.
Pour les deux s'il vous plaît suivez la publication Comment configurer les permissions pour xp_regread