Sql Server数据库对象访问权限控制

以下内容主要针对database层面的数据访问权限(比如select, insert, update, delete, execute…)

1.直接给user权限
GRANT EXECUTE TO [user]

2.通过role 控制权限,把user加入role中,继承Role所拥有的权限
GRANT EXECUTE TO [Role]
ALTER ROLE [Role] ADD MEMBER [Member]

3.通过app role的方式访问数据库
Application Role 是数据库级别的Role,不包含任何user,不能直接在数据库中使用,只能通过应用程序连接数据库使用。

Application Role不能和前面两种方式同时生效,如果某个login已经有数据库对应的User,而且赋予了相应的权限,但登录以后又激活了Application Role,那么这个login的security context就会切换到Application Role的security context,也就是只有Application Role的权限起作用。

需要注意的是在应用程序中激活了Application role之后,要访问其他的数据库只能用Guest account,鉴于Guest account被很多DBA视为眼中钉肉中刺,想用Application Role的还是请三思。

4.Sp 的 execute as XX
这是一种较为推荐的方式,可以在最小的粒度上控制权限。
这种方法就像领了尚方宝剑,比如 A是sp1的owner,sp1定义为 execute as owner,然后B有sp1的执行权限,那么B执行sp1的时候就拥有了A的所有权限,有效期到sp1执行结束。

类似的用法还有execute as caller/self/”username”/”loginName”. 默认情况,如果sp不写execute as 语句,用的是execute as caller.

5.Owned schema
Schema作为数据库中对象的集合,也可以用来控制权限,通过给用户赋予schema的权限,就同时赋予了schema包含的所有table,view,sp的权限。
可以在赋予schema权限之后,再在对象级别(table,view…)修改访问权限,最终以对象级别的权限为优先。

时间: 2024-10-10 07:26:08

Sql Server数据库对象访问权限控制的相关文章

SQL Server 2016 行级别权限控制

原文:SQL Server 2016 行级别权限控制 背景 假如我们有关键数据存储在一个表里面,比如人员表中包含员工.部门和薪水信息.只允许用户访问各自部门的信息,但是不能访问其他部门.一般我们都是在程序端实现这个功能,而在sqlserver2016以后也可以直接在数据库端实现这个功能. 解决 安全已经是一个数据方面的核心问题,每一代的MS数据库都有关于安全方面的新功能,那么在Sql Server 2016,也有很多这方面的升级,比如'Row Level Security', 'Always E

2014-07-30 MVC框架中对SQL Server数据库的访问

今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如图1所示: 图1 第二步,在上述Movies.cs文件中的namespace MvcTest.Models{}中输入如下代码: 1 public class Movie 2 { 3 public int ID { get; set; } 4 public string Title { get; se

使用ADO.NET对SQL Server数据库进行访问

在上一篇博客中我们给大家简单介绍了一下VB.NET语言的一些情况,至于理论知识的学习我们可以利用VB的知识体系为基础,再将面向对象程序设计语言的知识进行融合便可进行编程实战. 如果我们需要访问一个企业关系数据库(比如SQL Server或者Oracle),并且需要包含由复杂关系构成的表中的数据,如何去实现?我们可以利用ADO.NET内置功能提取并操作数据,就想插入.更新和删除SQL Server里的数据一样. 首先简单介绍一下ADO.NET.所谓的ADO就是ActiveXData Objects

SQL Server 查看对象的权限

例子 1. 查看登录名 loginA的权限: create login loginA with password = '123456'; go use studio; create user loginA_user for login loginA; go select * from sys.server_principals as pp inner join sys.server_permissions as ps on ps.grantee_principal_id = pp.princip

SQL Server 数据库权限设置

一.登录权限:SQL server的身份验证模式有以下两种: 1. Windows身份验证模式: 当使用Windows身份验证时,SQL server会使用操作系统中的Windows用户和密码.也就是说,当用户身份由Windows进行验证,SQL server不要求提供密码,也不执行身份验证.Windows身份验证是比SQL server身份验证更为安全的,可以保护SQL server免受大部分来自Internet的 攻 击.Windows身份验证适合用于在局域网内部(如AD域)访问数据库的情况

sql server 数据库忘记sa账户密码/ 无管理员账户解决办法

一.计算机超级管理员账户有数据库的管理员权限 用管理员账户登录数据库,直接修改sa账户密码即可. 二.数据库中没有管理员权限的账户 SQL Server 2005/2008提供了针对该情况的更好的灾难恢复方法,无需侵入master数据库,不会对master数据库中的对象和数据(例如登陆帐号,证书等)造成损坏.Windows管理员组的成员现在当SQL Server以单用户模式启动(另外一个名称为维护模式)的情况下对SQL Server有了访问权限. 通过使用单用户模式,SQL Server 200

C# ADO.NET访问SQL Server数据库<转>

ADO.NET的对象主要包括Connection.Command.DataReader.DataAdapter.DataSet,ADO.NET访问数据库主要包括两个步骤:建立数据库连接.读取或更新数据. 一.建立数据库连接 Connection对象负责建立和控制用户应用程序和数据库之间的连接.所有的数据库连接都要用到连接字符串,该字符串是使用分号隔开的多项信息,其内容随着数据库类型和访问内容的变化而变化. 连接字符串的格式:"Server=服务器名或服务器IP地址;DataBase=数据库名称;

访问SQL Server WMI对象

访问SQL Server WMI对象 1. 使用Powershell访问 get-wmiobject -list -namespace "root\Microsoft\SqlServer" get-wmiobject -list -namespace "root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER" get-wmiobject -namespace "root\Microsoft\SqlServer\C

c#.net 是如何访问 SQL Server 数据库

1.导入命名空间 using System.Data.SqlClient; //连接SQLServer 数据库专用 2.创建连接 SqlConnection lo_conn = New SqlConnection("Server=服务器名字或IP;Database=数据库名字;uid=用户名;pwd=密码"); 3.打开连接,第2步并没有真正连接数据库 lo_conn.Open(); //真正与数据库连接 4.向数据库发送SQL命令要使用SqlCommand: SqlCommand l