microsoft / microsoft/sqlmanagementobjects

Trying to create User of External UserType against a SqlManagedInstance results in error

Ouverte
#112 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
C#
Étoiles
143
Forks
28
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Hi @shueybubbles, greetings from the dbatools team 😄

I'm trying to add a SqlUser of type [Microsoft.SqlServer.Management.Smo.UserType]::External on a newly created SQL MI.

DatabaseEngineEdition: SqlManagedInstance
ServerVersion.Major: 16
SMO Version: 16
File version: 16.200.46367.54

I'm getting the following exception:

Exception             : System.Management.Automation.MethodInvocationException: Exception calling "Create" with "0" argument(s): "Create failed for 
                        User 'claudio@********.onmicrosoft.com'. "
                         ---> Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for User
                        'claudio@********.onmicrosoft.com'.
                         ---> Microsoft.SqlServer.Management.Smo.UnsupportedVersionException: 'User'.'UserType': 'External' is not a valid option for SQL Server 2017.

Code to reproduce:

$smoUser = New-Object Microsoft.SqlServer.Management.Smo.User
$smoUser.Parent = $dbSMO
$smoUser.Name = "claudio@********.onmicrosoft.com"
$smoUser.Login = "claudio@********.onmicrosoft.com"
$smoUser.UserType = [Microsoft.SqlServer.Management.Smo.UserType]::External
$smoUser.DefaultSchema = "dbo"
$smoUser.Create()

Note: with T-SQL it works.

From my analysis the problem is here (assuming the comment): https://github.com/microsoft/sqlmanagementobjects/blob/98093604e9ede97aa2a9b066279f0bd9d9557c4f/src/Microsoft/SqlServer/Management/Smo/UserBase.cs#L362-L364

It should be 12 <= this.ServerVersion.Major instead of >

Error message

Also, the error message says SQL Server 2017 when it should say SQL Server Managed Instance
It seems it's entering here:
https://github.com/microsoft/sqlmanagementobjects/blob/04249a2dc85ad1aa0d492b8a2cecf65583ded177/src/Microsoft/SqlServer/Management/Smo/SqlSmoObject.cs#L6919

I would suggest adding a new validation similar with
https://github.com/microsoft/sqlmanagementobjects/blob/04249a2dc85ad1aa0d492b8a2cecf65583ded177/src/Microsoft/SqlServer/Management/Smo/SqlSmoObject.cs#L6898-L6901

But like:

if (sp.TargetDatabaseEngineType == DatabaseEngineType.SqlAzureDatabase)
{
    return LocalizableResources.EngineCloud;
}
else if (sp.TargetDatabaseEngineType == DatabaseEngineType.Standalone && sp.DatabaseEngineEdition == DatabaseEngineEdition.SqlManagedInstance)
{
    return LocalizableResources.EngineCloudMI;
}

And add here:
https://github.com/microsoft/sqlmanagementobjects/blob/73cd2cb929409cb9ddc2c7b416c5d7c6ef621d5f/src/Microsoft/SqlServer/Management/Smo/LocalizableResources.strings#L26
A new entry

EngineCloudMI = Microsoft Azure SQL Managed Instance

PS: I'm more than happy to submit a PR with these changes if it's ok for you.
Thanks!

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les lignes citées de UserBase.cs autour de la validation de UserType, puis examinez la logique du nom du moteur dans SqlSmoObject.cs et LocalizableResources.strings. Reproduisez la création de l’utilisateur External sur SQL Managed Instance et vérifiez que la validation accepte la version et que l’erreur résultante identifie correctement Azure SQL Managed Instance.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
csharp, sql
Domaine
databases
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.