SQL Server 2005 Accorder facilement la sélection à toutes les tables et / ou vues d'une base de données

L'attribution de l'option Select à toutes les tables pour une connexion peut être un processus extrêmement pénible et long. Utiliser SQL Server Management Studio pour effectuer cela signifie aller table par table et cocher la case Sélectionner pour chaque table, cela devient un véritable cauchemar si vous travaillez avec des centaines de tables. Vous pouvez le faire en quelques secondes plutôt qu'en quelques heures en utilisant la fenêtre de requête. Voici comment:


1. Ouvrir SQL Server Management Studio.

2. Connectez-vous au serveur souhaité.

3. Cliquez sur le Nouvelle requête bouton.

4. Sélectionnez la base de données souhaitée dans le menu déroulant de la barre d'outils.

5. Pour accorder la sélection à toutes les tables de la base de données, copiez et collez le texte suivant dans votre fenêtre de requête:
DECLARE @login varchar (50)
SET @login = 'loginname'

DECLARE @tables TABLE (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSÉRER DANS @tables
SELECT 'GRANT SELECT ON' + NAME + 'TO' [email protected]
DE sysobjects
WHERE TYPE = 'U'
ET NOM N'AIME PAS 'SYNC%'

DECLARE @rowid int, @sqlstr varchar (500)
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_tbl_cursor CURSOR FOR
SELECT ROWID, SQLSTR
DE @tables
COMMANDE PAR ROWID
OPEN grant_tbl_cursor
FETCH NEXT FROM grant_tbl_cursor
INTO @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
COMMENCER
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_tbl_cursor
INTO @ rowid, @ sqlstr
FIN
CLOSE grant_tbl_cursor
DEALLOCATE grant_tbl_cursor

6. Dans la deuxième ligne de la requête collée, modifiez identifiant à la connexion que vous souhaitez accorder à Select à toutes les tables.

7. Exécutez la requête.

Pour accorder la sélection à toutes les vues de la base de données, suivez les étapes ci-dessus, mais procédez comme suit:
DECLARE @login varchar (50)
SET @login = 'loginname'

DECLARE @views TABLE (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSERT INTO @views
SELECT 'GRANT SELECT ON' + NAME + 'TO' [email protected]
DE sysobjects
WHERE TYPE = 'V'
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_vw_cursor CURSOR FOR
SELECT ROWID, SQLSTR
DE @views
COMMANDE PAR ROWID
OPEN grant_vw_cursor
FETCH NEXT FROM grant_vw_cursor
INTO @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
COMMENCER
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_vw_cursor
INTO @ rowid, @ sqlstr
FIN
CLOSE grant_vw_cursor
DEALLOCATE grant_vw_cursor