【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表

一、用户的设置与授权

SQL Server用户的设置与授权除了将不同的数据库开放给不同的用户以外,还有一个就是提供一个通道给其它程序访问,毕竟直接使用Windows身份验证有点不太专业。

在实验之前,我们先设置两个数据库,一个test还有一个是aaa。实现一个创建pc用户,仅授权它访问test的功能。

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第1张图片

1、在创建用户之前,我们先要对SQL2005进行设置,否则其默认是不提供给任何用户访问的。

一个是对数据库实例的属性进行设置,如下图,在安全性中,设置服务器身份验证为“SQL Server和Windows身份验证模式”同时设置登录审核为“失败和成功的登录”

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第2张图片

之后,我们在SQL数据库中进行如下的查询:

create login pc with password='admin', default_database=[test];
--登陆帐户名为:pc,登陆密码:admin,默认连接到的数据库:test
--这时候,pc帐户就可以连接到SQL Server服务器上了。但是此时还不能 访问数据库中的对象
--严格的说,此时pc帐户默认是guest数据库用户身份,可以访问guest能够访问的数据库对象
create user pc for login pc with default_schema=[dbo];
--并指定数据库用户pc的默认schema是dbo。
--意味着用户pc在执行select * from t,实际上执行的是select * from dbo.t。
--所有查询补个dbo.前缀为了与低版本SQL Server导过来的表相同
use [test];
go
exec sp_addrolemember 'db_owner', 'pc';
go
--在test数据库中
--通过加入数据库角色,赋予数据库用户“db_owner”权限
--此时pc可以随意操作数据库test

这段SQL语句秉承微软数据库的所有传统,凡是涉及表名、数据库名都用[]表明,以免触发系统的关键字。

而最后一条语句大家可能疑惑,为何要加一段go呢?这两个go还是不能省,毕竟它是用于确保use[test]和exec sp_addrolemember 'db_owner', 'pc';这两条语句不分裂,否则sp_addrolemember这个SQL保留的存储过程(这个概念也就是类似编程语言函数、过程、方法那些东东)是无法执行的,找不到你是指哪个数据库。

同时关于dbo是这样的:dbo是默认用户也是架构,dbo作为架构是为了更好的与2000兼容,这样2000中的代码移植到2005中就不会报错(dbo在2005中是默认的架构,创建表时,如不指定架构,则默认为属于dbo为个架构)。

以上的查询执行之后:

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第3张图片

你可以很明显地发现在数据库中,多了pc用户,右击属性,可以发现其test被这个pc用户映射,且其身份就是db_owner数据库拥有者,意思就是想搞啥都行。

此时,还不能直接用这个pc登录SQL,因为,你还要如下图,打开开始菜单的配置工具中的“服务和连接的外围应用配置器”,开始本地连接与远程连接,设置为同时使用TCP/IP和named pipes。

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第4张图片

设置完,还要如下图重启MSSQLSERVER与SQLEXPRESS两个服务。

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第5张图片

如果你不这样设置,可能会出现,如下的错误:

已成功与服务器建立连接,但是在登录过程中发生错取。(provider:共享内存提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233)

2、此时,你终于可以在登录的时候,在身份验证选择“SQL Server 身份验证”,登录名与密码就是你刚才在T-SQL语句中设置的密码。

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第6张图片

3、用这个pc登录之后,默认就登录在数据库test中,如果你要使用use aaa;其它没有权限的数据库,则会出现如下的结果:

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第7张图片

4、做完上述实验,如果不想要这个pc用户,可以在Windows身份验证中,按顺序执行以下两个查询,这两句也可以同时执行,执行之后pc就被删除了。

--删除数据库用户: 
drop user pc
--删除 SQL Server登陆帐户: 
drop login pc

二、sa用户登录

1、在安装SQL2005的时候,曾经设置过一个超级管理员sa用户,然而,在SQL Server并不能像其它数据库的root账号一样直接用来登录的。如果你要在SQL Server身份验证中使用sa来登录,必须做如下的设置:

如下图,首先要对sa的属性中的状态,设置其允许登录。

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第8张图片

同时,需要在“常规”上将密码重打一次,同时关闭“强制实施密码策略”。

点击确定,如上,重启SQL服务,就可以使用SQL Server身份验证中使用这个sa用户登录。

三、查询一个数据库中有多少张表

1、在SQL如果要查询一个数据库中有多少张表,很简单,

首先你要明白利用:

SELECT * FROM sysobjects WHERE (xtype = 'U')

能读出这个数据库中含有表的所有信息。

后面的条件xtype,是这样的:

xtype这个值还不一定等于U,还可以是下列对象类型中的一种,对sysobject理论上可以查询这个数据库的任何东西:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束 

L = 日志 

FN = 标量函数 

IF = 内嵌表函数 

P = 存储过程 

PK = PRIMARY KEY 约束(类型是 K) 

RF = 复制筛选存储过程 

S = 系统表 

TF = 表函数 

TR = 触发器 

U = 用户表 

UQ = UNIQUE 约束(类型是 K) 

V = 视图 

X = 扩展存储过程

2、不过一般情况下,如果我们单纯查询有多少张表,查询所有表名,或者表的数量就可以了,一般使用如下的语句:

SELECT name FROM sysobjects WHERE (xtype = 'U') --查询这个数据库所有的表明
SELECT count(*) FROM sysobjects WHERE (xtype = 'U') --查询这个数据库表的数量

运行结果如下:

【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表_第9张图片

你可能感兴趣的:(sql,server,管理,用户,授权,sysobject)