L'obtention de l'autorisation exécuter pour xp_cmdshell
Je vois un message d'erreur lorsque vous essayez d'exécuter xp_cmdshell de l'intérieur d'une procédure stockée.
xp_cmdshell est activé sur l'instance. Et l'exécution d'autorisation a été accordée à mon utilisateur, mais je vois toujours l'exception.
L'autorisation d'EXÉCUTION a été refusée sur l'objet "xp_cmdshell’, base de données "mssqlsystemresource", le schéma "sys"
Partie de la question est que c'est un cluster partagé, et nous avons une seule base de données sur l'instance, afin de ne pas avoir une gamme complète d'autorisations d'administrateur. Donc je ne peux pas y aller et l'octroi des autorisations, et ce-pas.
- Pourquoi utilisez-vous le plus dangereux de la procédure stockée jamais construit? (
xp_cmdshell
) - Il est plus vieux code, et pas le temps actuellement de réécriture. Nous l'utilisons pour appeler BCP pour importer un fichier dans une table temporaire pour le traitement. La table temporaire est le sql dynamique, et de générer le .fmt fichier basé sur la même logique que le sql dynamique utilise. Il serait plus qu'un jour pour re-mettre en œuvre.
- Vous pouvez poster exactement SQL numéro de version du Serveur, y compris le numéro de build?
- SQLServer 2005, 9.00.3042.00, Enterprise Edition, 64-bit
- Est-il possible d'exécuter cette requête sur votre système et après la date de retour?
select expiry_date from master.sys.certificates where name = '##MS_SQLResourceSigningCertificate##'
- Pas de résultats retournés. Aucun résultat quand j'ai sauter la clause where et tout sélectionner à partir du maître.sys.les certificats. Il peut être un problème d'autorisations
- C'est un problème de permission (le non-retour). J'ai essayé sur une étroite construire (3077, SP2) et le certificat expire en 2017, il devrait être bon. En outre, la signature de code est suposé pour valider l'heure d'expiration, à l'heure de signature, pas le temps de vérification. Je vous ai demandé de le faire parce que c'est très bizarre de voir la permission refusée à se référer à mssqlsystemresource db.
- Ok - merci. J'ai pensé. J'ai vu des solutions à l'aide d'un proxy-compte, mais je suis de commander à distance un DBA qui a un accès complet au site. Les commandes je suis d'envoi sont de plus en plus compliqué.
Vous devez vous connecter pour publier un commentaire.
Pour les utilisateurs qui ne sont pas membres du rôle sysadmin sur l'instance de SQL Server, vous devez effectuer les actions suivantes pour accorder l'accès à la procédure stockée étendue xp_cmdshell. En outre, si vous avez oublié une des étapes que j'ai énuméré l'erreur sera levée.
Activer la xp_cmdshell procédure
Créer un compte de connexion pour les non-utilisateur sysadmin qui a l'accès du public à la base de données master
Subvention EXEC de l'autorisation sur le xp_cmdshell procédure stockée
Créer un compte proxy qui xp_cmdshell être exécuté en vertu de l'aide sp_xp_cmdshell_proxy_account
Il semblerait, d'après le message d'erreur que soit l'étape 2 ou 3 a été manquée. Je ne suis pas familier avec les clusters de savoir si il y a quelque chose de particulier pour que le programme d'installation.
Je veux compléter la réponse de tchester.
(1) Permettre à l'xp_cmdshell procédure:
(2) Créer un compte de connexion "Domaine\TestUser' (utilisateurs windows) pour les non-utilisateur sysadmin qui a l'accès du public à la base de données master
(3) la Subvention EXEC de l'autorisation sur le xp_cmdshell procédure stockée:
(4) Créer un compte proxy qui xp_cmdshell être exécuté en vertu de l'aide sp_xp_cmdshell_proxy_account
(5) la Subvention serveur de contrôle de l'autorisation de l'utilisateur
CONTROL SERVER
autorisation. Au lieu de cela, vous pouvez lui accorder l'autorisation d'ouvrir une session en tant que lot de Windows tel que décrit ici. Ouvrir Paramètres de Sécurité Locaux dans Windows, allez dans Stratégies Locales -> Affectation d'Utilisateur -> Connecter en tant que tâche et ajouter le compte Windows[Domain\TestUser]
là. Travaillé pour moi, sans donner trop d'autorisations à l'utilisateur de domaine sur le serveur.tchester dit :
(2) Créer un compte de connexion pour les non-utilisateur sysadmin qui a l'accès du public à la base de données master
Je suis allé à mon utilisateur de la liste de base de données (serveur/sécurité/connexions/mon nom d'utilisateur/propriétés/mappage de l'utilisateur, et je voulais cocher pour la base de données master. J'ai eu un message d'erreur indiquant que l'utilisateur existe déjà dans la base de données master. Est allé à la base de données master, a chuté de l'utilisateur, est allée à "mappage de l'utilisateur" et coché la case pour maître. Cochez la case "public" de la boîte ci-dessous.
Après cela, vous devez à nouveau l'grant execute on xp_cmdshell "mon nom d'utilisateur"
Yves
De s'étendre sur ce qui a été fourni pour automatiquement l'exportation des données au format csv vers un partage réseau via l'Agent SQL Server.
(1) Permettre à l'xp_cmdshell procédure:
(2) Créer un compte de connexion "Domaine\TestUser' (utilisateurs windows) pour les non-utilisateur sysadmin qui a l'accès du public à la base de données master. Fait par le biais de mappage de l'utilisateur
(3) Donner connecter en tant que tâche: Accédez à la Stratégie de Sécurité Locale -> Politiques Locales -> Attribution des Droits Utilisateur. Ajouter un utilisateur d'ouvrir une session en tant que tâche"
(4) de Donner des autorisations de lecture/écriture vers un dossier réseau pour le domaine\utilisateur
(5) la Subvention EXEC de l'autorisation sur le xp_cmdshell procédure stockée:
(6) Créer un compte proxy qui xp_cmdshell être exécuté en vertu de l'aide sp_xp_cmdshell_proxy_account
(7) Si le sp_xp_cmdshell_proxy_account commande ne fonctionne pas, la créer manuellement
(8) Activer l'Agent SQL Server. Ouvrir le Gestionnaire de Configuration SQL Server, accédez à des Services SQL Server, activez l'Agent SQL Server.
(9) Créer automatisé de travail. Ouvert de SSMS, sélectionnez l'Agent SQL Server, puis cliquez-droit des emplois et cliquez sur "Nouvelle Tâche".
(10) Sélectionnez "Propriétaire" que votre utilisateur créé. Sélectionnez "Étapes", faire "type" = T-SQL. Remplissez le champ de commande similaire à ci-dessous. Définie comme délimiteur ','
(11) Remplir les horaires en conséquence.