--注:
--1. 将所有 mydb 替换成需要执行的DB名称
--2. 用户名 test_login, test_login 也需要替换
USE [master]
GO
--删除所有库中用户名为 test_login 的用户
EXEC sp_msforeachdb 'IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME=''test_login'' AND type_desc=''SQL_USER'')
DROP USER test_login
'
IF EXISTS(SELECT * FROM sys.syslogins AS s WHERE NAME='test_login')
BEGIN
DROP LOGIN [test_login]
END
/*
如果执行出错,
消息 15174,级别 16,状态 1,第 7 行
登录名 'test_login' 拥有一个或多个数据库。在删除该登录名之前,请更改相应数据库的所有者。
则执行下面的脚本修正
use mydb
go
EXEC Sp_changedbowner 'sa',true
*/
GO
CREATE LOGIN [test_login] WITH PASSWORD=N'test_login', CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [mydb]
GO
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME='test_login' AND type_desc='SQL_USER')
DROP USER test_login
GO
USE [master]
--任何库都无法看到
Deny VIEW any DATABASE TO test_login;
GO
--可以看到mydb
ALTER AUTHORIZATION ON DATABASE::mydb TO test_login
GO
--创建用户
CREATE USER [test_login] FOR LOGIN [test_login]
GO
--给予 db_owner 角色
EXEC sp_addrolemember N'db_owner', N'test_login'
GO
创建只能看到自己有权限库的登录名和用户
最新推荐文章于 2021-04-12 19:44:08 发布