一、新增登录名,对某几个数据库,授予该用户只读权限

-- 新增一个登录名,用户名:ReadonlyUser,密码:123456,默认数据库:master,过期时间OFF,策略OFF。
USE [master]
CREATE LOGIN [ReadonlyUser] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

-- 对SenooDB数据库,ReadonlyUser ,赋予只读权限(新增表也具有只读权限)
USE [SenooDB]
CREATE USER [ReadonlyUser] FOR LOGIN [ReadonlyUser]
ALTER ROLE [db_datareader] ADD MEMBER [ReadonlyUser]
GO

-- 对SQLTest数据库,ReadonlyUser ,赋予只读权限(新增表也具有只读权限)
USE [SQLTest]
CREATE USER [ReadonlyUser] FOR LOGIN [ReadonlyUser]
ALTER ROLE [db_datareader] ADD MEMBER [ReadonlyUser]
GO

-- 对TGEoilTest数据库,ReadonlyUser ,赋予只读权限(新增表也具有只读权限)
USE [TGEoilTest]
CREATE USER [ReadonlyUser] FOR LOGIN [ReadonlyUser]
ALTER ROLE [db_datareader] ADD MEMBER [ReadonlyUser]
GO

传统软件视窗创建 Microsoft SQLServer Management Studio

1、进入sqlserver management studio

2、选择安全性->登录名->右键新建登录名

3、在常规里输入用户名和密码

4、在"用户映射"里“映射到此登录名的用户”选择该用户可以操作的数据库

5、在“数据库角色成员身份”里选择“public”和"db_datareader",

6、这样一个只读用户就创建完成了。

二、新增登陆名,授予它,对某张表的增删改查权限

USE [master]
CREATE LOGIN [ReadOnlyTable] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO

USE [TestDB]
CREATE USER [ReadOnlyTable] FOR LOGIN [ReadOnlyTable]
GO

use [TestDB]
-- 给用户,对某张表的,增删改查权限
GRANT SELECT ON [dbo].[TestDetails] TO [ReadOnlyTable]
GRANT INSERT ON [dbo].[TestDetails] TO [ReadOnlyTable]
-- 给用户,对某张表的,增删改查权限
GRANT SELECT ON [dbo].[WorkStationRecords] TO [ReadOnlyTable]
GRANT INSERT ON [dbo].[WorkStationRecords] TO [ReadOnlyTable]
GRANT UPDATE ON [dbo].[WorkStationRecords] TO [ReadOnlyTable]
GRANT DELETE ON [dbo].[WorkStationRecords] TO [ReadOnlyTable]
GO

传统软件视窗创建 Microsoft SQLServer Management Studio

1、进入sqlserver management studio

2、选择安全性->登录名->右键新建登录名

3、在常规里输入用户名和密码

4、在"用户映射"里“映射到此登录名的用户”选择该用户可以操作的数据库

5、在“数据库角色成员身份”里只选择“public”,

6、这样一个只读用户就创建完成了。

7、选择需要操作的数据库->安全性->用户->右键属性

8、在打开的界面,选择安全对象->搜索

9、选择特定对象->确定

10、选择对象类型->表->确定

11、浏览-> 选择需要授权的表->确定->确定

12、在下面,选择给与该用户表的权限

13、确定,这样就完成了对表操作的授权。

附录:
sqlserver中判断表或临时表是否存在

1、判断数据表是否存在

方法一:
use yourdb;
go

if object_id(N'tablename',N'U') is not null
print '存在'
else
print '不存在'


例如:
use fireweb;
go

if object_id(N'TEMP_TBL',N'U') is not null
print '存在'
else
print '不存在'

 

方法二:

USE [实例名]
GO

IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'[表名]') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'


例如:
use fireweb;
go

IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'TEMP_TBL') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'

2、临时表是否存在:

方法一:
use fireweb;
go

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##TEMP_TBL'))
PRINT '存在'
ELSE
PRINT'不存在'


方法二:
use fireweb;
go

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#TEMP_TBL') and type='U')
PRINT '存在'
ELSE
PRINT'不存在'

问题点1:无法删除登录名 'XXX',因为该用户当前正处于登录状态。 (Microsoft SQL Server,错误: 15434)
问题描述:当删除数据库用户时,有时会得到这样的提示: 无法删除登录名 'XXX',因为该用户当前正处于登录状态。 (Microsoft SQL Server,错误: 15434)

解决办法:
1.首先执行:EXEC sp_who 查出用户进程的spid,
2.然后执行:kill spid
3.最后执行:sp_drop login [用户名]

问题点2:如何查询当前数据库被哪些用户和客户机所打开?

  SELECT    LOGINAME ,                        --连接的时候使用的哪个SQL登陆用户        
            HOSTNAME ,                       --客户端的机器名                          
            NT_USERNAME ,                            --客户端的登陆用户(OS的用户)  
            PROGRAM_NAME      --是从查询分析器,还是应用程序来执行的                
  FROM      MASTER..SYSPROCESSES

问题点3:查询所有数据库下面的用户

/**查询所有数据库下面的用户**/
create table #Data(dbname varchar(100),username nvarchar(700),gid nvarchar(30),uid nvarchar(30));

declare @name varchar(100) 
declare cur cursor  for 
    select name from master..Sysdatabases order by name 
open cur 
fetch next from cur into @name 
while @@fetch_status=0 
begin 
  
   insert into #Data exec('use [' + @name+'];select '''+@name+''' as dbname,name,gid,uid  from dbo.sysusers')
   -- print @name 
   fetch next from cur into @name 
end 
close cur 
deallocate cur 


select * from #Data where gid=0 and (uid!=gid)

/********
  drop table #Data
******/

-- select * from dbo.sysusers

问题点4:【知识参考】服务器角色参考 (可以对数据库的操作)

bulkadmin 可以运行 bulk insert 语句  bulk insert 详细 http://blog.csdn.net/jackmacro/article/details/5959321

dbcreator   创建,修改,删除,还原任何数据库

diskadmin   管理磁盘文件

processadmin   可以终止在数据库引擎实例中运行的程序

public          默认建立登录名,都需要授予的

securityadmin   可以管理登录名及其属性,具有grant,deny,和revoke服务器和数据库级别权限,还可以重置sql server 登录名的密码

serveradmin     可以更改服务器范围的配置选项和关闭服务器

setupadmin     可以添加和删除链接服务器,并对可以执行某些系统执行存储过程(如,sp_serveroption)

sysadmin         在sql server中进行任何活动,该觉得的权限跨越所有其他固定服务器角色,默认情况下,windows builtin\admin组(本地管理员组)的所有成员都是sysadmin固定服务器角色的成员

问题点5:【知识参考】用户映射参考  (可以对数据库的数据进行操作)

db_owner       可以执行数据库中技术所有动作的用户

db_accessadmin 可以添加,删除用户的用户

db_datareader 可以查看所有数据库中用户表内数据的用户

db_datawrite 可以添加,修改,删除所有数据库用户表内数据的用户

db_ddladmin 可以在数据库中执行ddl操作的用户,DDL(Data Definition Language)数据表的创建以及管理

db_securityadmin 可以管理数据库中与安全权限有关所有动作的用户

db_backoperator 可以备份数据库的用户(可以发布dbcc和checkPoint语句,这两个语句一般在备份前使用

db_denydatareader 不能看到数据库中任何数据的用户

db_denydatawrite 不能修改数据库中任何数据的用户