Aucun message portant le libellé Management Reporter. Afficher tous les messages
Aucun message portant le libellé Management Reporter. Afficher tous les messages

Management Reporter: Base de données avec SQL AlwaysOn Availability Groups - Partie 2 (Facile)

J’ai déjà écrit deux billets au sujet de la configuration de la base de données Management Reporter avec SQL AlwaysOn Availability Groups.

Dans le billet Management Reporter : Base de données avec SQL AlwaysOn Availability Groups - Partie 1 (Difficile), je propose de faire une sauvegarde de la Service Key (SMK) et de la restaurer sur les serveurs secondaires. Voici une alternative beaucoup plus simple.

Lorsque SQL nécessite une Database Master Key (DMK) afin de déchiffre ou chiffrer une clé, SQL essaie de déchiffre la DMK à partir de la Service Master Key (SMK). Si ceci échoue, SQL regarde si le mot de passe pour ouvrir la DMK se trouve dans sys.master_key_passwords. Il suffit d'ajouter le mot de passe de la DMK pour ManagementReporter dans le catalogue sys.master_key_passwords pour tous les serveurs du groupe.

EXEC sp_control_dbmasterkey_password @db_name = N'ManagementReporter'
    @password = N'MotDePasseDeLaDMK', @action = N'add';

Management Reporter: Base de données avec SQL AlwaysOn Availability Groups - Partie 1 (Difficile)

Dernièrement, j’ai écrit un billet sur un problème déchiffrement de données de la base de données Management Reporter lorsqu'elle est restaurée sur un autre serveur SQL. Vous pouvez la lire ici: Management reporter : The "DecryptData'" procédure attempted To return à status of NULL.

Le même problème survient lorsque la base de données ManagementReporter est dans un groupe de disponibilité Always On (Availability group). C'est-à-dire que lorsque vous basculez la base de données ManagementReporter vers le serveur secondaire, celui-ci ne sera pas capable de déchiffrer les données de la base de données. Par conséquence, la la base de données DataMart disparait de la console et le message d'erreur suivant apparait dans le journal d'évènements:

Please create a master key in the database or open the master key in the session before performing this operation.

The 'DecryptData' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead. Originating procedure: DecryptData.

J’ai donc fait des recherches pour savoir comment configurer Management Reporter dans un environnement hautement disponible avec SQL AlwaysOn Availability Group. Je conseille de lire ce billet afin de comprendre le problème, toutefois, j'ai écrit un billet qui offre une solution plus facile: Management Reporter: Base de données avec SQL AlwaysOn Availability Groups - Partie 2 (Facile)

Lors de mes recherches, j’ai trouvé le lien suivant: High Availability best practices for Dynamics AX 2012. Dans la section Financial Reporting High Availability, on peut y lire: [...] If encryption is used, you need to apply the same configuration onto the other node to ensure business continuity after failover.[...].

Tout d’abord, je ne sais pas pourquoi il y a l’utilisation du mot "if" puisqu'a ma connaissance il est obligatoire d’utiliser le cryptage lors de du déploiement de Management Reporter. Ensuite, j’ai lu l’article recommandé et celui-ci explique comment exporter/importer le certificat de cryptage TDE. Cette technique ne fonctionne pas puisque ManagementReporter n’utilise pas TDE, il utilise plutôt une clé symétrique pour crypter des colonnes dans la base de données. Alors, j’ai poussé mes recherches voici ce que j'ai trouvé.

Tout d'abord, il faut comprendre les différente clé utilisées lors du processus de chiffrage/déchiffrage de SQL:

1. Service Key (SMK) – Généré par le service SQL, elle est utilisé pour crypter le Database Master Key (DMK).
2. Database Master Key (DMK) – utilisé pour crypter le certificat.
3. Certificat – Utilisé pour crypter la clé symétrique
4. Symmetric Key – Utilisé pour crypter les données (finalement!).

Sommaire: Service Key --> Database Master Key --> Certificat -->  Symmetric Key --> Données

Eh oui, assez fou ! Le problème dans notre cas c’est que le Service Key (SMK) du second serveur SQL n’est pas capable de déchiffrer le Database Master Key (DMK) situé dans la a base de données Management Reporter puisque celle-ci fut chiffré avec le Service Key du serveur primaire. Puisque SQL n'est pas capable d'ouvrir la DMK, il ne peut donc pas ouvrir le certificat, etc...

Regardons la configuration.

Tout d'abord, on peut y voir que SMK se trouve dans la base de données Master. Cette clé est crée lors du démarrage du service SQL et ne possède pas de mot de passe.

USE MASTER 
SELECT
FROM sys.symmetric_keys


Ensuite, je peux trouver toutes les bases de donnée avec une DMK encrypter par le SMK:

USE MASTER
SELECT name
FROM sys.databases
WHERE is_master_key_encrypted_by_server = 1


La DMK permet de déchiffrer les certificats. Donc, regardons les certificats dans la base de données Management Reporter:

USE ManagementReporter
SELECT name,
certificate_id,
subject, 
pvt_key_encryption_type_desc
FROM sys.certificates


Les certificats permettent de déchiffrer les clés symétriques. Donc, regardons les clés symétriques dans la base de données Management Reporter:

USE ManagementReporter
SELECT
FROM sys.symmetric_keys


En fait, il est possible de voir cela via l'interface graphique:


Les clés symétriques permettent de déchiffrer les données. Donc, trouvons les données chiffrer dans la base de données Management Reporter:

SELECT S.name AS 'Schema',
T.name AS 'Table', 
C.name AS 'Column', ty.name AS 'DataType'
FROM sys.columns C
JOIN sys.types ty ON C.system_type_id = ty.system_type_id
JOIN sys.tables T ON C.object_id = T.object_id
JOIN sys.schemas S ON T.schema_id = S.schema_id
WHERE ty.name IN ('binary', 'varbinary', 'image')
ORDER BY S.name, T.name, C.name, ty.name;


Ultimement, j'aimerais déchiffrer des données avec la cle symétrique, mais malheureuse j'ai trouvé aucune donnée chiffrée dans ma base de données ManagementReporter (les champs sont vides). Donc, le plus loin que je peux aller est d'ouvrir la clé symétrique avec l'aide du certificat.


Ensuite, j'ai basculé la base de données ManagementReporter vers mon serveur secondaire et j'ai testé l'ouverture de la clé symétrique. Sans surprise, j'ai reçu le message d'erreur suivant:

Please create a master key in the database or open the master key in the session before performing this operation.

OPEN SYMMETRIC KEY ConnectorServiceSymmetricKey
DECRYPTION BY CERTIFICATE ConnectorServiceCertificate
CLOSE SYMMETRIC KEY ConnectorServiceSymmetricKey

OPEN SYMMETRIC KEY GeneralUserSymmetricKey
DECRYPTION BY CERTIFICATE GeneralUserCertificate
CLOSE SYMMETRIC KEY GeneralUserSymmetricKey


Le problème est dû au fait que la SMK n'est pas capable d'ouvrir la DMK. Pour corriger le problème, il faut faire une sauvegarde de la SMK du serveur primaire et de la restaurer sur le serveur secondaire.

Sauvegarde sur le serveur primaire:

BACKUP SERVICE MASTER KEY
TO FILE = 'C:\SQLBackup\Keys\service_master_key'
ENCRYPTION BY PASSWORD = 'MettreUnMotdePasseComplexe'

Restauration sur le serveur secondaire:

RESTORE SERVICE MASTER KEY 
FROM FILE = 'C:\SQLBackup\Keys\service_master_key' 
DECRYPTION BY PASSWORD = 'MettreUnMotdePasseComplexe'

Toutefois, lors de la restauration, j'ai reçu le message suivant:

The old and new master keys are identical. No data re-encryption is required.

Donc, j'ai basculé la base de données vers le serveur secondaire et j'ai restauré la SMK. Cette fois-ci, j'ai reçu le message suivant:

An error occurred while decrypting master key 'ManagementReporter' that was encrypted by the old master key. The FORCE option can be used to ignore this error and continue the operation, but data that cannot be decrypted by the old master key will become unavailable.

Cette erreur survient parce que SQL tente de déchiffrer la DMK afin de la rechiffrer avec la nouvelle clé. Il y a l'option FORCE, mais celle-ci peut causer des pertes de données. A la place d'utiliser l'option FORCE, j'ai manuellement ouvert la DMK pour ajouter la SMK:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'PasswordDuringMRInstallation'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

Si vous ne connaissez pas le mot de passe de la DMK, je suggère de faire la procédure suivante: Error messages when you restore a Microsoft Management Reporter 2012 database: The operation could not be completed.

Ensuite, j'ai fait la restauration de la SMK:

RESTORE SERVICE MASTER KEY 
FROM FILE = 'C:\SQLBackup\Keys\service_master_key' 
DECRYPTION BY PASSWORD = 'MettreUnMotdePasseComplexe'

Finalement, j'ai fait des tests de basculement de la base de données et j'étais capable d'ouvrir les clés symétriques sur les deux serveurs et Management Reporter fonctionnait parfaitement.

Source:
Configuring MS SQL for AlwaysOn Automated Failover of the K2 Database.
ALTER SERVICE MASTER KEY
RESTORE SERVICE MASTER KEY
Finding Encrypted Data in a SQL Server Database
Database Master Key Error After Database Restore

Management Reporter: The 'DecryptData' procedure attempted to return a status of NULL

Lors de la configuration de la base de données datamart pour Management Reporter, je recevais le message d'erreur suivant:

An error occured while configuring 'Microsoft Dynamics AX 2012 Data Mart'. Check the deployment log for details.



J'ai trouvé le message d'erreur suivant dans le journal d'événement:

Please create a master key in the database or open the master key in the session before performing this operation.

The 'DecryptData' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead. Originating procedure: DecryptData.

La base de données ManagementReporter est chiffrée avec une Database Master Key (DMK).  Lors de la restauration de la base de données sur un autre serveur, la nouvelle instance SQL n'est pas capable d'ouvrir la Database Master Key (DMK) et déchiffrer les données. La solution à ce problème se trouve ici: Error messages when you restore a Microsoft Management Reporter 2012 database: “The operation could not be completed”.

J'ai aussi écrit un autre billet sur la configuration de ManagementReporter avec SQL AlwaysOn Availability: Management Reporter : Base de données avec SQL AlwaysOn Availability Groups

Management Reporter: This file does not have a program associated

Lorsqu'un utilisateur click le lien Management Reporter dans le client AX, il reçoit le message d'erreur suivant:

This file does not have a program associated with it for performing this action. Please install a program or, if one is already installed,create an association in the Default Programs control panel.



Lorsqu'un utilisateur click le bouton Management Reporter dans le client AX, il recoit le message d'erreur suivant:

This file does not have a program associated with it for performing this action. Please install a program or, if one is already installed,create an association in the Default Programs control panel.

Normalement, un utilisateur reçois ce message lorsque Report Designer n'est pas installé sur la machine, mais cette fois-ci, Report designer était bel et bien installé. J'ai donc regardé l'association de l'extension mrd. J'ai comparé la configuration entre une machine qui fonctionne et celle qui ne fonctionne pas et j'ai trouvé une différence.

Dans la clee HKCR\mrd\shell\open\command

J'ai changé

C:\Program Files\Microsoft Dynamics ERP\Management Reporter\2.1\Client\ReportDesigner.exe %1

pour

"C:\Program Files\Microsoft Dynamics ERP\Management Reporter\2.1\Client\ReportDesigner.exe" %1

Management Reporter: The operation could not be completed because the item is not checked out.

Suite à une migration de Management Reporter CU13 vers CU16, je n'énais pas capable de compléter l'intégration. La tâche AX 2012 Organisation Hierarchies To Tree était en erreur:


J'avais le message d'erreur suivant:

The operation could not be completed because the item is not checked out.



Après quelques vérifications, il se trouve que organizational hierarchies devrait être checked-out en tout temps. Alors, j'ai identifié l'ID du compte admin en exécutant cette commande:

SELECT UserID, UserName, RoleType, WindowsSecurityIdentifier FROM Reporting.SecurityUser



Ensuite, j'ai manuellement checked-out les object en utilisant cette commande:

UPDATE Reporting.ControlTreeMaster SET CheckedOutTo = '00000000-0000-0000-0000-000000000002'

Après que l'intégration soit terminée, je suis allé dans Report Designer --> Tools --> Checked Out items --> Show items from all users et j'ai Undo Checkout pour tous les objects.