microsoft / microsoft/sqlmanagementobjects
Trying to create User of External UserType against a SqlManagedInstance results in error
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C#
- Estrellas
- 143
- Forks
- 28
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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!
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comience con las líneas citadas de UserBase.cs relacionadas con la validación de UserType y, a continuación, inspeccione la lógica del nombre del motor en SqlSmoObject.cs y LocalizableResources.strings. Reproduzca la creación del usuario External contra SQL Managed Instance y verifique que la validación acepte la versión y que el error resultante identifique correctamente Azure SQL Managed Instance.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- csharp, sql
- Área
- databases
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 45/100