feat: Add ability to optionally create Database contained user, instead of Instance level#299
Open
baburciu wants to merge 2 commits intocrossplane-contrib:masterfrom
Open
Conversation
…ad of Instance level Signed-off-by: Bogdan-Adrian Burciu <bogdanadrian.burciu@yahoo.com>
871aa38 to
803b7e9
Compare
chlunde
reviewed
Dec 5, 2025
| // When true, the user will be created directly in the specified database using CREATE USER WITH PASSWORD. | ||
| // When false (default), a server-level LOGIN will be created first, then a database user mapped to that login. | ||
| // +optional | ||
| Contained *bool `json:"contained,omitempty"` |
Collaborator
There was a problem hiding this comment.
Changing this value after creation is not supported, right? Should we have CEL validatioin to ensure it's not mutated?
Author
There was a problem hiding this comment.
hi @chlunde, I've added CEL validation for contained immutability in last commit
Signed-off-by: Bogdan-Adrian Burciu <bogdanadrian.burciu@yahoo.com>
0f47bf8 to
a1060e6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of your changes
This PR adds support for MSSQL contained database users, for scenarios where users need to be scoped only to specific databases without requiring server-level login creation.
Problem Statement:
AFAIU the existing
loginDatabasefunctionality only allows creating LOGINs in one database (typicallymaster). However, this traditional LOGIN+USER pattern has critical limitations:CREATE USER FOR LOGINbecome orphaned on read replicas since the referenced LOGIN doesn't exist on the replica instance/serverKey Changes:
containedfield for theUser.mssql.sql.crossplane.ioresource: Added optional boolean field to both cluster and namespaced MSSQL User CRDscontained: true: UsesCREATE USER [username] WITH PASSWORD = 'password'syntax directly in target databasecontained: falseor unset: Uses traditionalCREATE LOGIN+CREATE USER FOR LOGINapproachcontained: trueandloginDatabasefieldsDefault behavior is unchanged when
containedfield is not specified, ensuring existing deployments continue to work.Disclaimer: AI was also used in generating this patch.
Fixes #298
I have:
make reviewableto ensure this PR is ready for review.How has this code been tested
Built the package
docker.io/bogdanadrianburciu/provider-sql:v0.13.0-issue298-amd64and tested with a Crossplane1.20.0install in AKS.With
we see (in Azure SQL):