用SQL创建数据库登录用户
2010-11-10 22:53 观海看云 阅读(1006) 评论(0) 编辑 收藏 举报
用SQL创建数据库登录用户
用户通过用来建立连接权限的登录(身份验证),获得 Microsoft® SQL Server™ 数据库的访问权限。因为 SQL Server 使用 Microsoft® Windows® 2005 身份验证,所以每个 SQL Server 登录必须与一个有效 Windows 帐户相关联。然后,可以为每个基于 Windows 用户或组帐户的 SQL 登录授予连接到 SQL Server 的权限。
注意 SQL Server 7.0 和 SQL Server 2000 不再独立于操作系统而管理组。SQL Server 较低版本中的组已被功能更强的角色所替代。但是,您可以在整个 Windows 组级管理 SQL Server 的安全。
如果您拥有 SQL Server 的系统管理员权限,则可以使用以下方法创建和修改 SQL Server 登录:
· 在SQL Server 2005新建查询中创建 SQL Server 登录
· 使用 SQL Server 工作流模板实例化向导创建 SQL Server 登录
当您使用向导从模板中创建工作流应用程序实例时,可以添加 SQL Server 登录。但是,只有当应用程序创建者拥有 SQL Server 系统管理员权限,并且 SQL Server 登录已经具有有效的 Windows 帐户时,此功能才有效。除非服务器管理员也为 modAppOwners 组授予了 SQL Server 系统管理员权限,否则 modAppOwners 成员不能创建 SQL Server 登录。
命名规则
用户名或组名不能与所管理的域或计算机的任何其它用户名或组名相同。它最多可包含 20 个大写或小写字符,但不能包含以下字符:
" / \ [ ] : ; | = , + * ? < >
用户名或组名不能只包含句点 (.) 和空格。
有关 SQL Server 登录的命名规则的详细信息,请参阅“SQL Server 联机丛书”。
SQL创建登录示例:
A. 创建具有主默认数据库的登录 ID
下例为用户 Victoria 创建一个 SQL Server 登录,没有指定默认数据库。
EXEC sp_addlogin 'Victoria', 'B1r12-36'
B. 创建登录 ID 和默认数据库
下例为用户 Albert 创建一个 SQL Server 登录,并指定密码“B1r12-36”以及名为 corporate 的默认数据库。
EXEC sp_addlogin 'Albert', 'B1r12-36', 'corporate'
C.创建使用其它默认语言的登录 ID
下例为用户 Claire Picard 创建一个 SQL Server 登录,密码为“B1r12-36”,默认数据库为 public_db,默认语言为 French。
EXEC sp_addlogin 'Claire Picard', 'B1r12-36', 'public_db', 'french'
D. 创建带有特定 SID 的登录 ID
下例为用户 Michael 创建一个 SQL Server 登录,密码为“B1r12-36”,默认数据库为 pubs,默认语言为 us_english,SID 为 0x0123456789ABCDEF0123456789ABCDEF。
EXEC sp_addlogin 'Michael', 'B1r12-36', 'pubs', 'us_english', 0x0123456789ABCDEF0123456789ABCDEF
E. 创建登录 ID 并且不加密密码
下例在 Server1 上为用户 Margaret 创建了一个密码为“B1r12-36”的 SQL Server 登录,再析取此加密密码,然后使用前面加密的密码将用户登录 Margaret 添加到 Server2,但不对此密码进一步加密。之后,用户 Margaret 即可使用密码“Rose”登录到 Server2。
-- Server1
EXEC sp_addlogin 'Margaret', 'B1r12-36'
--Results
New login created.
-- Extract encrypted password for Margaret
SELECT CONVERT(VARBINARY(256), password)
FROM syslogins
WHERE name = 'Margaret'
--Results
------------------------------------------------------------------
0x0100163A5F026DA00F9FBCF3CB2E75B0C84887F3A87E191F8E0B7A2660F064A52B19590B9DE20D94DC0DFF857EDA
(1 row(s) affected)
-- Server2
EXEC sp_addlogin 'Margaret', 0x0100163A5F026DA00F9FBCF3CB2E75B0C84887F3A87E191F8E0B7A2660F064A52B19590B9DE20D94DC0DFF857EDA,
@encryptopt = 'skip_encryption'

2 EXEC sp_addlogin 'trafficManager', 'manager'
3 /*---建立营业员登录帐户---*/
4 EXEC sp_addlogin 'seller','seller'
5 GO
6 /*---建立数据库用户---*/
7 USE productDB
8 GO
9 EXEC sp_grantdbaccess 'trafficManager','manager'
10 EXEC sp_grantdbaccess 'seller','seller'
11 GO
12 /*---向新建立的数据库用户授予权限---*/
13 USE productDB
14 GO
15 GRANT select,insert,update,delete on proInfo to manager
16 GRANT select on proInfo to seller
17 GO

GO
/*---检查是否已存在productDB数据库:查询master数据库中的系统表sysdatabases---*/
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'productDB')
DROP DATABASE productDB
GO
EXEC xp_cmdshell 'mkdir D:\SQL' --调用DOS命令创建文件夹,后续章节将讲解
/*-----建库--------*/
CREATE DATABASE productDB
ON
(
/*----数据文件的具体描述--*/
NAME = 'proDB_data', --主数据文件的逻辑名
FILENAME = 'D:\SQL\proDB_data.mdf' , --主数据文件的物理名
SIZE = 10 MB, --主数据文件初始大小
FILEGROWTH = 20% --主数据文件的增长率
)
LOG ON
(
/*----日志文件的具体描述,各参数含义同上--*/
NAME = 'proDB_log',
FILENAME = 'D:\SQL\proDB_log.ldf' ,
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 20%
)
GO

ALTER TABLE stuInfo
ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)
---添加唯一约束(身份证号唯一,因为每人的身份证号全国唯一)
ALTER TABLE stuInfo
ADD CONSTRAINT UQ_stuID UNIQUE (stuID)
---添加默认约束(如果地址不填,默认为“地址不详”)
ALTER TABLE stuInfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress
---添加检查check约束,要求年龄只能在15-40岁之间
ALTER TABLE stuInfo
ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)
--添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo)
ALTER TABLE stuMarks
ADD CONSTRAINT FK_stuNo
FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)
GO
when price='' then '价格未知'
when price between 10 and 20 then '价格在10至20之间'
when price between 20 and 30 then '价格适中'
else cast(price as char(10))
end
from books

GO
--恢复原来的数据
--UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName='李四'
SET NOCOUNT ON --不显示受影响的行数信息
print '查看转帐事务前的余额'
SELECT * FROM bank
GO
/*--开始事务(指定事务从此处开始,后续的T-SQL语句都是一个整体--*/
BEGIN TRANSACTION
/*--定义变量,用于累计事务执行过程中的错误--*/
DECLARE @errorSum INT
SET @errorSum=0 --初始化为0,即无错误
/*--转帐:张三的帐户少1000元,李四的帐户多1000元*/
UPDATE bank SET currentMoney=currentMoney-800 WHERE customerName='张三'
SET @errorSum=@errorSum+@@error --累计是否有错误
UPDATE bank SET currentMoney=currentMoney+800 WHERE customerName='李四'
SET @errorSum=@errorSum+@@error --累计是否有错误
print '查看转帐事务过程中的余额'
SELECT * FROM bank
/*--根据是否有错误,确定事务是提交还是撤销---*/
IF @errorSum<>0 --如果有错误
BEGIN
print '交易失败,回滚事务'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
print '交易成功,提交事务,写入硬盘,永久的保存'
COMMIT TRANSACTION
END
GO
print '查看转帐事务后的余额'
SELECT * FROM bank
GO

GO
/*--检测是否存在该索引(索引存放在系统表sysindexes中)----*/
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'IX_stuMarks_writtenExam')
DROP INDEX stuMarks.IX_stuMarks_writtenExam --删除索引
/*--笔试列创建聚集索引:填充因子为30%--*/
CREATE NONCLUSTERED INDEX IX_stuMarks_writtenExam
ON stuMarks(writtenExam)
WITH FILLFACTOR= 30
GO
/*--指定按索引:IX_stuMarks_writtenExam查询--*/
SELECT * FROM stuMarks
(INDEX=IX_stuMarks_writtenExam)
WHERE writtenExam BETWEEN 60 AND 90

EXEC sp_databases --列出当前系统中的数据库
EXEC sp_renamedb 'Northwind','Northwind1'--改变数据库名称(单用户访问)
USE stuDB
GO
EXEC sp_tables --当前数据库中查询的对象的列表
EXEC sp_columns stuInfo --返回某个表列的信息
EXEC sp_help stuInfo --查看表stuInfo的信息
EXEC sp_helpconstraint stuInfo --查看表stuInfo的约束
EXEC sp_helpindex stuMarks --查看表stuMarks的索引
EXEC sp_helptext 'view_stuInfo_stuMarks' --查看视图的语句文本
EXEC sp_stored_procedures --返回当前数据库中的存储过程列表
出处:http://www.cnblogs.com/zhangtao/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器