Obtenir la permission d'exécuter XP cmdshell

je vois un message d'erreur en essayant d'exécuter xp_cmdshell à partir d'une procédure stockée.

xp_cmdshell est activé sur l'instance. Et la permission d'Exécuter a été accordée à mon utilisateur, mais je vois toujours l'exception.

la permission D'exécution a été refusée sur l'objet 'xp_cmdshell', la base de données ‘mssqlsystemresource', le schéma ‘sys'

une partie du problème est qu'il s'agit d'un cluster partagé, et nous avons un seul base de données sur l'instance, donc nous n'avons pas une gamme complète de permissions admin. Donc je ne peux pas y aller et accorder des permissions, et quoi-pas.

27
demandé sur David Griffiths 2010-01-07 01:13:51

4 réponses

pour les utilisateurs qui ne sont pas membres du rôle sysadmin sur L'instance du serveur SQL, 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.

  1. activer la procédure xp_cmdshell

    Msg 15281, Niveau 16, État 1, Procédure xp_cmdshell, Ligne 1 Le serveur SQL bloque l'accès à la procédure "sys.xp_cmdshell' du component 'xp_cmdshell' parce que ce component est désactivé dans le cadre de la configuration de sécurité de ce serveur. Un administrateur système peut activer l'utilisation de 'xp_cmdshell' en utilisant sp_configure. Pour plus d'informations sur l'activation de 'xp_cmdshell', voir "Configuration de la surface" dans les livres SQL Server en ligne.*

  2. créer un login pour l'utilisateur non-sysadmin qui a un accès public à la base de données principale

    Msg 229, Niveau 14, État 5, de la Procédure de xp_cmdshell, Ligne 1 La permission D'Exécuter a été refusée sur l'objet 'xp_cmdshell', la base de données 'mssqlsystemresource', le schéma 'sys'.*

  3. accordez la permission EXEC sur la procédure stockée xp_cmdshell

    Msg 229, Niveau 14, État 5, de la Procédure de xp_cmdshell, Ligne 1 La permission D'Exécuter a été refusée sur l'objet 'xp_cmdshell', base de données 'mssqlsystemresource', schéma "sys".*

  4. Créer un compte proxy qui xp_cmdshell être exécuté en vertu de l'aide sp_xp_cmdshell_proxy_account

    Msg 15153, Niveau 16, État 1, Procédure xp_cmdshell, Ligne 1 Les informations du compte mandataire xp_cmdshell ne peuvent pas être récupérées ou sont invalides. Vérifiez que le justificatif d'identité "##xp_cmdshell_proxy_account## " existe et contient des informations valides.*

Il semblerait, d'après votre erreur: l'étape 2 ou 3 n'a pas été respectée. Je ne suis pas familier avec les clusters pour savoir s'il ya quelque chose de particulier à cette configuration.

52
répondu KyleMit 2016-07-20 20:09:09

je veux compléter la réponse de tchester.

(1) Activer la procédure xp_cmdshell:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(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:

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(4) Créer un compte mandataire dans lequel xp_cmdshell sera exécuté en utilisant sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'pwd'
-- Note: pwd means windows password for [Domain\TestUser] account id on the box.
--       Don't include square brackets around Domain\TestUser.

(5) Accordez la permission du serveur de contrôle à l'utilisateur

USE master;
GRANT CONTROL SERVER TO [Domain\TestUser]
GO
38
répondu nZeus 2014-01-21 16:41:59

tchester a 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é à ma liste de base de données des utilisateurs (serveur/sécurité/connexions/mon nom d'utilisateur/propriétés/cartographie des utilisateurs, et je voulais cocher la case pour la base de données principale. J'ai reçu un message d'erreur disant que l'utilisateur existe déjà dans la base de données principale. Je suis allé à la base de données principale, j'ai laissé tomber l'utilisateur, je suis retourné à "user mapping" et j'ai coché la case "master". Vérifier le "public" de la boîte ci-dessous.

après cela, vous devez réémettre l'exécution de la subvention sur xp_cmdshell à "mon nom d'utilisateur"

Yves

1
répondu Yves Forget 2012-09-17 17:08:21

pour développer ce qui a été prévu pour exporter automatiquement des données en tant que csv vers un partage de réseau via un Agent SQL Server.

(1) Activer la procédure xp_cmdshell:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(2) Créer un login 'Domain\TestUser' (Windows user) pour l'utilisateur non-sysadmin qui a un accès public à la base de données principale. Fait par le biais de mappage de l'utilisateur

(3) Ouvrir une session par lots: naviguer vers la Politique de sécurité locale -> politiques locales -> cession des droits de l'utilisateur. Ajouter un utilisateur à "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:

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(6) Créer un compte mandataire dans lequel xp_cmdshell sera exécuté en utilisant sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'password_for_domain_user'

(7) Si la commande sp_xp_cmdshell_proxy_account ne fonctionne pas, créez-la manuellement

create credential ##xp_cmdshell_proxy_account## with identity = 'Domain\DomainUser', secret = 'password'

(8) activer SQL Server Agent. Open SQL Server Gestionnaire de Configuration, naviguez vers les Services SQL Server, activez SQL Server Agent.

(9) créer un emploi automatisé. Ouvrez SSMS, sélectionnez SQL Server Agent, puis faites un clic droit sur jobs et cliquez sur "New Job".

(10) sélectionnez "propriétaire" comme utilisateur créé. Sélectionnez "Steps", faites "type" = T-SQL. Remplissez le champ de commande similaire à ci-dessous. Ensemble délimiteur ','

EXEC master..xp_cmdshell 'SQLCMD -q "select * from master" -o file.csv -s "," 

(11) remplir les annexes en conséquence.

0
répondu Schylar 2018-03-06 20:33:51