Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change DB owner with ALTER AUTHORIZATION #1954

Merged
merged 7 commits into from
Oct 26, 2023
Merged

Change DB owner with ALTER AUTHORIZATION #1954

merged 7 commits into from
Oct 26, 2023

Conversation

robverschoor
Copy link
Contributor

@robverschoor robverschoor commented Oct 25, 2023

Description

Implement ALTER AUTHORIZATION to change database ownership.
Syntax: ALTER AUTHORIZATION ON DATABASE::<dbname> TO <login-name>
It is a common requirement for the DBA to create a database to be owned by a login. Thus far in Babelfish this was possible only by (temporarily) making the target login a member of sysadmin role, which is undesirable.
To change the database owner to a different login, all that is required is to update sys.babelfish_sysdatabases.owner to the new owner's login name. There are some restrictions such as that the new owner cannot be a user in the database already (guest user does not count). a non-sysadmin DB owner cannot grant ownership to anyone else, including to a sysadmin login. (however, it is OK to grant ownership to yourself although there seems little point in that).
When the current DB owner has an active session in the database with the current DB set to that same database, and at the same time a different session change the database ownership, the now-previous owner retains access rights in the session as long as the database context remains unchanged; as soon as the database context is changed, the access rights from the DB ownership are lost: Babelfish behaves identically to T-SQL here.
To implement this feature, statement type PLTSQL_STMT_CHANGE_DBOWNER was introduced rather than something more generic-looking like PLTSQL_STMT_ALTERAUTH: other cases of ALTER AUTHORIZATION may affect the ownership/permissions-related artefacts that are created by Babelfish, or require different catalog modifications; therefore, the DB ownership change is more of a one-off case.

Signed-off-by: Rob Verschoor [email protected]

Issues Resolved

BABEL-2121: Babel does not support ALTER AUTHORIZATION syntax to change database owner

Test Scenarios Covered

  • Use case based - Yes

  • Boundary conditions - Yes

  • Arbitrary inputs - N/A

  • Negative test cases - Yes

  • Minor version upgrade tests - N/A

  • Major version upgrade tests - N/A

  • Performance tests - N/A

  • Tooling impact - N/A

  • Client tests - N/A

Check List

  • Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is under the terms of the Apache 2.0 and PostgreSQL licenses, and grant any person obtaining a copy of the contribution permission to relicense all or a portion of my contribution to the PostgreSQL License solely to contribute all or a portion of my contribution to the PostgreSQL open source project.

For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@robverschoor robverschoor changed the title Change DB owner Change DB owner with ALTER AUTHORIZATION Oct 25, 2023
@Deepesh125 Deepesh125 merged commit 1083c88 into babelfish-for-postgresql:BABEL_3_X_DEV Oct 26, 2023
27 checks passed
@robverschoor robverschoor deleted the change_db_owner branch October 26, 2023 13:50
@robverschoor robverschoor mentioned this pull request Oct 27, 2023
1 task
staticlibs pushed a commit to wiltondb/babelfish_extensions that referenced this pull request Apr 21, 2024
Implement ALTER AUTHORIZATION to change database ownership.

Syntax: ALTER AUTHORIZATION ON DATABASE::<dbname> TO <login-name>

It is a common requirement for the DBA to create a database to be owned by a login. Thus far in Babelfish this was
possible only by (temporarily) making the target login a member of sysadmin role, which is undesirable.
To change the database owner to a different login, all that is required is to update sys.babelfish_sysdatabases.owner to
the new owner's login name. There are some restrictions such as that the new owner cannot be a user in the database
already (guest user does not count). A non-sysadmin DB owner cannot grant ownership to anyone else, including to a
sysadmin login. (however, it is OK to grant ownership to yourself although there seems little point in that).
When the current DB owner has an active session in the database with the current DB set to that same database, and at
the same time a different session change the database ownership, the now-previous owner retains access rights in the
session as long as the database context remains unchanged; as soon as the database context is changed, the access
rights from the DB ownership are lost: Babelfish behaves identically to T-SQL here.
To implement this feature, statement type PLTSQL_STMT_CHANGE_DBOWNER was introduced rather than something
more generic-looking like PLTSQL_STMT_ALTERAUTH: other cases of ALTER AUTHORIZATION may affect the
ownership/permissions-related artefacts that are created by Babelfish, or require different catalog modifications;
therefore, the DB ownership change is more of a one-off case.

BABEL-2121: Babel does not support ALTER AUTHORIZATION syntax to change database owner
Signed-off-by: Rob Verschoor <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants