SqlServer新增schema和用户的命令

一、需求:

在dbeaver中,对sqlserver数据库,新增schema,新增schema对应的用户

二、创建步骤(DBeaver工具中使用):

步骤 1:先创建 sqltest Schema(单独执行)

bash 复制代码
USE master;
-- 先检查是否存在,不存在则创建
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'sqltest')
EXEC ('CREATE SCHEMA sqltest AUTHORIZATION dbo;');
PRINT '✅ Schema [sqltest] 创建成功';

步骤 2:创建服务器登录 test_user

bash 复制代码
USE master;
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = 'test_user')
BEGIN
    CREATE LOGIN test_user 
    WITH PASSWORD = 'TestPass@123456',
         DEFAULT_DATABASE = master;
    PRINT '✅ 服务器登录 [test_user] 创建成功';
END;

步骤 3:创建数据库用户并绑定 Schema(单独执行)

bash 复制代码
USE master;
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = 'test_user')
BEGIN
    CREATE USER test_user FOR LOGIN test_user 
    WITH DEFAULT_SCHEMA = sqltest;
    PRINT '✅ 数据库用户 [test_user] 创建并绑定sqltest成功';
END;

步骤 4:授予权限(单独执行)

bash 复制代码
USE master;
GRANT SELECT, INSERT, UPDATE ON SCHEMA::sqltest TO test_user;
PRINT '✅ 已授予test_user操作sqltest的权限';
bash 复制代码
USE master;
-- 授予test_user在master数据库中创建表的权限
GRANT CREATE TABLE TO test_user;
PRINT '✅ 已授予test_user在master中创建表的权限';
bash 复制代码
USE master;
-- 授予test_user访问sqltest Schema的权限
GRANT ALTER, REFERENCES, VIEW DEFINITION ON SCHEMA::sqltest TO test_user;
PRINT '✅ 已授予test_user访问sqltest Schema的权限';

三、验证sqltest Schema、test_user用户及其绑定关系、权限是否配置生效

1、验证 1:确认sqltest Schema 是否在master数据库中存在

bash 复制代码
USE master;
SELECT 
    schema_id AS [架构ID],
    name AS [架构名称],
    principal_id AS [所有者ID],
    USER_NAME(principal_id) AS [所有者名称] -- 预期返回 dbo
FROM sys.schemas
WHERE name = 'sqltest';

预期结果:

返回 1 条非空记录,[架构名称]为sqltest,[所有者名称]为dbo,说明 Schema 创建成功且所有者配置合规。

2、验证 2:确认test_user用户及sqltest默认 Schema 绑定生效

bash 复制代码
USE master;
SELECT 
    dp.name AS [数据库用户名],
    dp.default_schema_name AS [默认架构名称], -- 预期返回 sqltest
    dp.type_desc AS [用户类型], -- 预期返回 SQL_USER
    sp.default_database_name AS [默认连接数据库] -- 预期返回 master
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON dp.name = sp.name
WHERE dp.name = 'test_user';

预期结果:

返回 1 条非空记录,[默认架构名称]明确显示为sqltest,[默认连接数据库]为master,说明用户与 Schema 的唯一绑定符合网关验证要求。

3、验证 3:确认test_user对sqltest Schema 的操作权限已授予

bash 复制代码
USE master;
-- 完整查询test_user对sqltest Schema的所有权限
SELECT 
    USER_NAME(grantee_principal_id) AS [被授权用户],
    SCHEMA_NAME(major_id) AS [授权架构],
    permission_name AS [权限名称],
    state_desc AS [权限状态]
FROM sys.database_permissions
WHERE 
    grantee_principal_id = USER_ID('test_user')
    AND major_id = SCHEMA_ID('sqltest')
ORDER BY permission_name;

预期结果:

执行后会返回 6 条记录,对应所有已授予的权限,如下:

  • test_user已获得sqltest Schema 的INSERT/SELECT/UPDATE权限,状态都是GRANT,权限配置生效;
  • 结合之前验证的 "Schema 存在 + 用户默认 Schema 绑定",所有配置都符合要求。

额外的CREATE TABLE权限(数据库级,不显示在 Schema 权限列表中)

bash 复制代码
USE master;
-- 验证数据库级的CREATE TABLE权限
SELECT 
    USER_NAME(grantee_principal_id) AS [被授权用户],
    permission_name AS [权限名称],
    class_desc AS [权限级别],
    state_desc AS [权限状态]
FROM sys.database_permissions
WHERE 
    grantee_principal_id = USER_ID('test_user')
    AND permission_name = 'CREATE TABLE';
预期结果:

返回 1 条记录,显示test_user拥有master数据库的CREATE TABLE权限,状态为GRANT。

四、验证结果汇总说明

若以上 3 条语句均返回符合预期的结果,说明所有配置已全部生效。

  • 数据库名:master
  • 默认用户:test_user
  • 用户密码:TestPass@123456
  • 对应 Schema:sqltest(已通过用户默认 Schema 自动绑定)
相关推荐
余槐i6 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹6 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人7 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台9 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见10 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见10 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202310 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶11 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课11 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析