我们有一个测试数据库和一些测试登录帐户,希望通过脚本为它们授予db_owner访问权限。通常情况下,我们需要进入登录名单,右键单击用户名并转到用户映射,选择要关联的数据库,并授予其owner访问权限,然后点击OK。
我们有一个测试数据库和一些测试登录帐户,希望通过脚本为它们授予db_owner访问权限。通常情况下,我们需要进入登录名单,右键单击用户名并转到用户映射,选择要关联的数据库,并授予其owner访问权限,然后点击OK。
USE (database)
):
CREATE USER [LoginName] FOR LOGIN [LoginName]
EXEC sp_addrolemember N'db_owner', N'LoginName'
我想提出另一种解决方案,这可能会对某些人有所帮助...
-- create the user on the master database
USE [master]
GO
CREATE LOGIN [MyUserName] WITH PASSWORD=N'MyPassword'
CREATE USER [MyUserName] FOR LOGIN [MyUserName]
GO
-- create the user on the target database for the login
USE [MyDatabaseName]
GO
CREATE USER [MyUserName] FOR LOGIN [MyUserName]
GO
-- add the user to the desired role
USE [MyDatabaseName]
GO
ALTER ROLE [db_owner] ADD MEMBER [MyUserName]
GO
ALTER ROLE
修改名为MyLogin
的现有服务器登录的方法。USE MyDatabase
CREATE USER MyLogin FOR LOGIN MyLogin
ALTER ROLE db_owner ADD MEMBER MyLogin
GO
https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-role-transact-sql
执行 sp_addrolemember 'db_owner', 'MyUser'
添加登录,使用默认模式“dbo”添加用户,将用户添加到角色中,并且能够在Azure或本地SQL服务器上无误运行:
--note login and user have same name
-- change the names of: DBNAME, PASSWORDHERE and LOGINNAMEHERE
--1 create login
use master
GO
IF not EXISTS (SELECT * FROM sys.sql_logins WHERE name = N'LOGINNAMEHERE')
BEGIN
CREATE LOGIN [LOGINNAMEHERE] WITH PASSWORD=N'PASSWORDHERE'
END
--2 on DB create User
use DBNAME
GO
if (Not Exists(select * from sys.sysusers where name = 'LOGINNAMEHERE'))
BEGIN;
CREATE USER [LOGINNAMEHERE] FOR LOGIN [LOGINNAMEHERE] WITH DEFAULT_SCHEMA=[dbo]
END;
GO
--3 insert role membership
IF ((select ISNULL(is_rolemember('db_owner', 'LOGINNAMEHERE'),0)) <> 1)
BEGIN;
--EXEC sp_addrolemember 'db_owner', 'LOGINNAMEHERE'
ALTER ROLE [db_owner] ADD MEMBER [LOGINNAMEHERE];
END;
IF ((select ISNULL(is_rolemember('db_owner', 'LOGINNAMEHERE'),0)) <> 1)
BEGIN;
PRINT 'user not added to role try sp_addrolemember';
END;
sys.database_principals
来检查是否已经映射。 - Tadmas