SQLserver 创建用户并分配权限

本文详细介绍如何在SQL Server中创建用户、添加用户到数据库以及分配用户的权限。包括创建登录名、添加用户到具体数据库及对用户授予特定表的操作权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建用户

---1.创建登录名
IF ( NOT EXISTS ( SELECT    1
                  FROM      sys.sql_logins
                  WHERE     name = 'auditor' )
   )
   --设置用户auditor密码为1
    CREATE LOGIN auditor WITH PASSWORD='1'
GO

2、数据库添加用户

语句添加

--2.针对每个库访问当前用户
IF ( USER_ID('auditor') IS NOT NULL )
    DROP  USER auditor
GO
CREATE USER auditor FOR LOGIN auditor WITH DEFAULT_SCHEMA=dbo
GRANT SELECT TO auditor

也可以手动添加用户,右键数据库选择【属性】,选择权限添加新增用户

在这里插入图片描述

3、分配用户权限

查询sys.dm_db_partition_stats表需要分配权限VIEW SERVER STATE

--Grant <权限> on 表名[(列名)] to 用户 With  grant  option 
--或 GRANT <权限> ON <数据对象> FROM <数据库用户>  
--分配File表  查询权限SELECT给auditor
GRANT SELECT ON [File] TO auditor;
--查询sys.dm_db_partition_stats表需要分配VIEW SERVER STATE
GRANT VIEW SERVER STATE TO auditor;

在这里插入图片描述

### 创建用户设置权限SQL Server 中创建用户为其分配适当权限的过程涉及几个关键步骤。这不仅限于简单的账户创建,还包括确保用户能够访问所需的资源。 #### 1. 创建登录名 为了使外部实体(如个人或应用程序)可以连接到 SQL Server 实例,首先需要创建一个登录名。如果不存在名为 `dba` 的登录,则应执行以下命令: ```sql IF (NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = 'dba')) BEGIN CREATE LOGIN dba WITH PASSWORD = 'StrongPassword!'; END; GO ``` 此操作会在服务器级别建立身份验证机制[^3]。 #### 2. 将登录映射至数据库用户 一旦有了有效的登录凭证,下一步就是将其与具体的一个或多数据库内部的安全主体相联系。对于每一个目标数据库而言,都需要增加对应的数据库用户条目: ```sql USE DatabaseName; -- 替换为实际的目标数据库名称 CREATE USER dba FOR LOGIN dba; GO ``` 上述脚本需针对希望给予 `dba` 权限的每一处数据库重复执行一次[^4]。 #### 3. 赋予必要的权限 根据业务需求的不同,可能要授予不同层次的操作许可给这位新加入的角色。比如读取、写入或是更高级别的管理功能都可以通过 T-SQL 命令实现。这里给出一些常见的例子: - **授予权限** ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO dba; -- 或者仅提供只读访问权 GRANT CONNECT TO dba; GRANT VIEW ANY DEFINITION TO dba; ``` 这些指令允许 `dba` 对整个架构下的所有对象进行基本的数据操纵活动;而后者则仅仅开放了连接的权利加上查看元数据的能力[^1]。 - **批量处理多库情况** 当面对众多相似配置的需求时,编写循环结构来简化工作量不失为一种高效的方法。下面是一个 PowerShell 和 T-SQL 结合的例子,它遍历所有的非系统数据库向其中添加相同的用户及其基础权限: ```powershell $instanceserver = "YourServerInstance" $databases = Invoke-Sqlcmd -Query "SELECT name FROM master.sys.databases WHERE database_id > 4;" -ServerInstance $instanceserver foreach ($db in $databases){ Write-Host "Processing $($db.name)" $query = @" USE [$($db.name)]; CREATE USER dba FOR LOGIN dba; GRANT CONNECT TO dba; "@; Invoke-Sqlcmd -Query $query -ServerInstance $instanceserver } ``` 这段代码利用 Windows PowerShell 提供的功能实现了跨多个数据库的一致化部署过程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值