Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 13h34   #1
Invité de passage
 
Homme
Consultant informatique
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 3
Points : 3
Par défaut Sauvegarde des droits avant restaure de base

Bonjour,
Après restaure de base SQL SERVER en DEV à partir de la PROD, je me retrouve avec les droits définis en PROD.
Aussi j'aimerais savoir s'il n'existerait pas une instruction/procédure stokée permettant de restaurer les droits après restaure ou bien d'effectuer un restaure sans toucher aux droits ?
A l'heure actuelle je prend photo avant restaure et remets "à la main" les autorisation...un peu fastidieux quand même et peut-être même dangereux si je dois effectuer un restaure en prod un jour...
Merci de votre aide.
Lolotte95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 13h48   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 725
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 725
Points : 6 849
Points : 6 849
Si vous parlez des droits propres à la base de données (utilisateurs etc...) non puisque une restauration viendra écraser le paramétrage existant. Il faut donc veiller à bien sauvegarder votre configuration avant restauration.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2012, 14h24   #3
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 608
Points : 1 608
Si voulez bien etre une testeuse de mon script, vous pouvez essayer ceci (copier le script dans un fichier Permissions.ps1 et executer le script depuis une machine ayant powershell 2.0 et sqlps installe) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
#
# Loads the SQL Server Management Objects (SMO)
#
$ErrorActionPreference = "Stop"
$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"
IF (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Provider for Windows PowerShell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}
 
$assemblylist = 
"Microsoft.SqlServer.Management.Common",
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.Instapi ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.SqlTDiagM ",
"Microsoft.SqlServer.SString ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum",
"Microsoft.SqlServer.Management.Dac",
"Microsoft.SqlServer.Management.DacEnum",
"Microsoft.SqlServer.Management.Utility"
 
foreach ($asm IN $assemblylist)
{
    $asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}
 
$serverName= read-host "Please enter the server name where you is located the database (i.e.:server1\instance2)"
$databaseName= read-host "Please enter the database name you want to list the permissions (i.e.:DatabaseA)"
$serverConnection = new-object Microsoft.SqlServer.Management.Common.ServerConnection
$serverConnection.ServerInstance=$serverName
$server = new-object Microsoft.SqlServer.Management.SMO.Server($serverConnection)
$database = $server.DATABASES[$databaseName]
#Database user database permissions/object permissions
foreach($user IN $database.Users)
{
 foreach($databasePermission IN $database.EnumDatabasePermissions($user.Name))
 {
  $Grantee = $databasePermission.Grantee
  Write-Host $databasePermission.PermissionState $databasePermission.PermissionType "TO [$Grantee]" 
 }
 foreach($objectPermission IN $database.EnumObjectPermissions($user.Name))
 {
  #Write-Host $objectPermission.PermissionState $objectPermission.PermissionType "ON" $objectPermission.ObjectName "TO" $objectPermission.Grantee
  $permissionState = $objectPermission.PermissionState
  $PermissionType = $objectPermission.PermissionType
  $ObjectSchema = $objectPermission.ObjectSchema
  $ObjectName = $objectPermission.ObjectName
  $Grantee = $objectPermission.Grantee
 
  Write-Host "$PermissionState $PermissionType ON [$ObjectSchema].[$ObjectName] TO [$Grantee]"
 }
}
#Create user defined roles
foreach($Role IN $database.Roles)
{
 IF($Role.IsFixedRole  -ne 1 -AND $Role.name -ne "Public")
 {
  write-host "create role $Role"
 
   foreach($objectPermission IN $database.EnumObjectPermissions($Role.name))
   {
    $permissionState = $objectPermission.PermissionState
    $PermissionType = $objectPermission.PermissionType
    $ObjectSchema = $objectPermission.ObjectSchema
    $ObjectName = $objectPermission.ObjectName
    $Grantee = $objectPermission.Grantee
 
    Write-Host "$PermissionState $PermissionType ON [$ObjectSchema].[$ObjectName] TO [$Grantee]"
    #Write-Host $objectPermission.PermissionState $objectPermission.PermissionType "ON " $objectPermission.ObjectSchema.$objectPermission.ObjectName "TO" $objectPermission.Grantee
   }
 }
}
#add role members
foreach($Role IN $database.Roles)
{
 $roleName = $Role.name
 foreach($roleMember IN $Role.EnumMembers())
 {
  Write-Host "sp_addrolemember '$roleName','$roleMember'"
 }
}
$server.ConnectionContext.Disconnect()
Le script vous demandera le servername\instanceName et le nom de la base de donnees de laquelle vous souhaitez scripter les permissions.
Il generera en output (dans la fenetre powershell) la liste des permissions actuellement definies sur la base.
Bien qu'il puisse repondre a pas mal de besoins, il n'est pas garanti 100%. (Je dois encore trouver le temps de fignoler/optimiser et tester completement)

Tout feedback est le bienvenu, ce qui m'aidera aussi a avancer la dessus (Y compris si d'autres testeurs sont volontaires )
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h55.


 
 
 
 
Partenaires

Hébergement Web