查看对象的ID和Name,Server实例级别的安全主体

作者: www.9159.com  发布:2019-12-10

正文用于收罗在运行中时常使用的种类内置(built-in)函数,持续整合治理中

SQL Server付与客商访问对象的权柄,日常的方式是:Grants permissions on a securable to a principal(user or login卡塔尔国,相当于说,赋予权限的一声令下分为三有个别:Permission,Securable 和 Principal,用一句话来解释那四个概念:付与 Principal 操作 Securable 的 Permission。Principal是被授予权限的主心骨,是被授与者(Grantee),是Login,User或Role。Securable是table,view,SP等对象,是Principal操作的靶子;一时Principal也会作为Securable,被Principal垄断。在给与权限的子句中,未有主语,那是因为,只好付与本来就有的权限,而最原始的宗旨是在创制SQL Server实例时内定的,该账号具有最高的权能,通过该账号把权力授予相应的安全中央。权限能够付与(GRANT)或制止(DENY),也得以被回笼(REVOKE),SQL Server通过命令GRANT,允许主体对安全目标做一点操作,通过命令DENY禁止主体对平安指标做一些操作,通过REVOKE命令收回对宗旨已赋予(GRANT)或已明确命令禁绝(DENY)的权位。

一,常用Metadata函数

在SQL Server的安全模型中,安全爱惜主要分为多少个等级:实例等第和数据库等级,每八个等第都亟待三个与之相应的安全大旨:Login是SQL Server实例等第的平安注重,用于登录实例时的验证,验证方式分为Windows验证(通过Windows域账户声明登录权限)和SQL Server验证(通过账号和密码验证登录权限),而User是数据库级其他安全宗旨,用于访问数据库。Login和User能够因而SID(安全标志)关联起来,假使Login未有关联User,那么Login只好通过Public剧中人物去拜候数据库;假使User未有提到Login,那么该User是孤立客商,只好通过模拟权限被选拔。日常情状下,多个User只可以关联叁个Login。

1,查看数据库的ID和Name

在SQL Server的克拉玛依模型中,sa和dbo 那四个安全核心具备相对调控权限,sa是login,归于实例级其他基点,dbo是user,归属数据库级其他主脑。每一个归属sysadmin服务器剧中人物的Login都会炫丽到数据库级其余dbo客商,相当于说,实例级其他login差异,数据库级其余user是同等的,都是dbo,但是,那几个Login的SID都以平等的。

db_id(‘DB Name’),db_name('DB ID')

SQL Server 数据库引擎处理一个档案的次序构造的实业集合,实体正是沾沾自满指标(Securable),最关键的安全目的是Server和Database,最注重的平安入眼(Principal)是Login和User,如下图所示:

2,查看对象的ID和Name,对象的Schema,对象的概念

  • 侧面为平安器重:安全入眼(Principal)分为三种:在Windows 等级上是Login,在SQL Server实例品级上是Login和实例等第的Role,在数据库等第是 User和数据库级其余Role。
  • 左边手为平安目的(Securable):对于平安目的(Securable)来讲,SQL Server 实例是Database的聚焦,而Database是User,Role,Schema等的集结,Schema是数据库对象的联谊,数据库对象是指Table,View,SP,Function等,操作差别的靶子,须要的权位不一致。
OBJECT_ID ( 'schema_name . object_name','object_type' ) 
OBJECT_NAME ( object_id [, database_id ] ) 
OBJECT_SCHEMA_NAME ( object_id [, database_id ] )
OBJECT_DEFINITION ( object_id ) 

图片 1

3,查看Schema的ID和Name,通过对象ID获取对象的构造名(Schema)

SQL Server的安全模型是有档期的顺序布局的,对平安目的的权柄存在继续关系,对父安全目的上安装的权位,会自动一而再再而三到子安全指标上,比如,拥有布局(Schema)的CONTROL权限,那表示,对该构造下的富有的数据库对象都用于CONTROL权限。

SCHEMA_NAME ( [ schema_id ] )  
SCHEMA_ID ( [ schema_name ] ) 
OBJECT_SCHEMA_NAME ( object_id [, database_id ] )  

日常景况下,权限的管住都以本着数据库对象(Table,View,SP,Schema等)的,数据库对象的显要权力如下列表所示:

4,查看Column的Name

  • ALTER:用于修正数据库对象的定义,是DDL等级的权力;给予顾客对一定Schema的ALTE宝马X5权限,这意味,客户能够alter, create, 或 drop 该Schema下的别样数据库对象。
  • VIEW DEFINITION:用于查看数据库对象的定义;
  • EXECUTE:用于施行SP,函数的权位;
  • DELETE,INSERT,UPDATE和SELECT:用于对数据表或视图实行增加和删除改查操作,是DML级其余权力;
  • REFERENCES:授予援用的权位,用于在当前表中援用其余数据表主键的权杖;
  • CONTROL:调控权,被授予权限的顾客,实际上具备操作对象的具备权限。The grantee effectively has all defined permissions on the securable.
COL_NAME(table_id,column_id)

客户可以透过表值函数:sys.fn_builtin_permissions('object') 查看SQL Server补助的对object可赋予权限的列表。

二,获取客商和登录的函数

豆蔻梢头,付与客商访问数据库对象的权位

1,当前数据库User的Name(Database User)

在成立Login和User之后(可以参见《Security1:登录和客商》),把拜访Object的权能给予数据库客户(User)或剧中人物(Role),语法如下:

CURRENT_USER
GRANT <permission> [ ,...n ] 
ON OBJECT :: schema_name.object_name[ ( column [ ,...n ] ) ] 
TO [Database_user | Database_role] [ ,...n ]

2,查看数据库User的Name 和ID(Database User)

对此Table,View等数据库对象,能够把权力决定在column的粒度上,只允许顾客访谈特定的数据列;假诺在GRANT子句中不经意column,那么顾客能够访谈整个table或view的全部列。

USER_NAME ( [ id ] )
USER_ID ( [ 'user' ] )
USER_SID()
DATABASE_PRINCIPAL_ID ( 'principal_name' )  

把走访Schema的权力给与数据库顾客或剧中人物,语法如下:

3,查看服务器User的Name和ID(Server User,即Login)

GRANT permission  [ ,...n ] 
ON SCHEMA :: schema_name  
TO database_principal [ ,...n ]  

Login(登入)是服务器主体(Server Principal),有Name和ID属性,每多个Login都有多少个康宁标记(SID)。

1,授予对数据表的select权限

--返回Login ID,参数是Login Name
SUSER_ID ( ['login'] )            
--返回Login Name,参数是Login ID,         
SUSER_NAME ( [login_id] )
--返回SID(security identification),参数是Login Name
SUSER_SID ( ['login'] [ , Param2 ] )    
--返回Login Name,参数是SID
SUSER_SNAME ( [SID] )    
GRANT SELECT 
ON OBJECT::Person.Address 
TO RosaQdM; 

4,SID和ID的区别

2,给予实践SP的权位

当创造四个SQL Server Login时,从sys.server_principals 系统视图中,能够看见该Login被内定叁个ID和SID,在SQL Server实例中,ID和SID都以唯大器晚成的,不一样之处是,ID标记Login,将Login作为贰个Securable ,SID标志Login的Security Context。日常的话,ID能够引用,不过SID常常是不会引用的。当将同二个Login重复创制时,其ID可能产生变化,然而其SID不变。

GRANT EXECUTE 
ON OBJECT::hr.usp_UpdateEmployeeHireInfo  
TO Recruiting11; 

不仅Login有ID和SID,Database User也有。当一个database users创建时,从sys.database_principals中,能够看见该User被钦点一个ID和SID。在数据库等第,ID是唯后生可畏的。就算User是从SQL Server Login创制的,那么User和Login的SID相仿。 实际情况,请参见《SIDs and IDs.aspx)》

3,赋予引用数据列的权力
以下脚本赋予客户Wanida援用数据库对象 HumanResources.vEmployee的数额列 BusinessEntityID作为外键。

三,常用全局变量

GRANT REFERENCES (BusinessEntityID) 
ON OBJECT::hr.view_Employee   
TO Wanida WITH GRANT OPTION;

1,SQL Server的Name,ServiceName和版本

二,通过成立Role给予权限

@@SERVERNAME,@@SERVICENAME,@@VERSION

授予权限的章程,共有二种,第大器晚成种方法是把权力直接给与客户,

查看服务器名字,也足以应用函数 serverproperty('servername'卡塔尔(قطر‎,不常 serverproperty('servername'卡塔尔(قطر‎ 和 @@servername 重回的值分化,那大概是修改服务器的名号诱致,使用如下脚本修复,同样重视启service,检查服务器的称呼:

  • 能够付与对单个数据库对象(单个数据表或视图等)的权能,
  • 也足以付与客户操作Schema的权力,由于Schema是objects的器皿,付与客户操作Schema的权柄,就同一授予操作Schema下全体objects的权能;
--将两者协调一致,再重启 SQL Server 服务
if serverproperty('servername')<>@@servername  
begin  
    declare @server sysname  
    set @server= @@servername   
    exec sys.sp_dropserver @server = @server
    set @server  = cast(serverproperty('servername') as sysname)  
    exec sys.sp_addserver @server = @server ,@local = 'LOCAL'  
end

use master
go
select name ,@@servername,serverproperty('servername')
from sys.servers
where server_id=0    --Local Server ID = 0 
go

第二种方法是把权限授予数据库剧中人物Role,然后把剧中人物Role的权能付与客商,那样,客商就颇负Role的具备权限,以下代码,通过创办Role,把权力付与特定的客商:

 2,重返当前module的ID,module包蕴:SP,UDF,Trigger

图片 2图片 3

@@PROCID

--获取当前Module Name
declare @ObjectName sysname;
select @ObjectName=object_name(@@ProcID)
--create login
create login [domainuser] 
from windows
go

--create user
create user [domainuser]  
for login [domainuser] 
go

--create role
create role role_name
go

--create schema
create schema schema_name
go

--grant permission on schema to role
grant select,execute
on schema::schema_name
to role_name;

--grant permission on object to role
grant select ,insert
on object::schema_name.object_name
to role_name;

--add member
alter role role_name
add member [domainuser] ;
go

3,再次来到当前Session的ID,当前的RequestID

View Code

@@SPID
CURRENT_REQUEST_ID() 

三,通过创造权限模拟来予以权限

4,在时下Session中,再次回到上一条Query影响的数据行数量

在SQL Server的平安模型中,模拟(IMPETucsonSONATE )权限的池州目标是User或Login,被付与者(Grantee )有权力模拟钦定顾客,在其安全上下文实践一定的操作。

@@ROWCOUNT 
ROWCOUNT_BIG ( ) 

举个例子,user1授予模拟user2的权柄,当user2的平安上下文有丰裕的权能,而user1没一时,通过权限模拟,user1能够在user2的权位上下文中推行查询供给:

5,当前Connection中,再次回到已开启,但未甘休的事体数量,查看当前事情的ID,和业务的状态(1,0,-1)

GRANT IMPERSONATE 
ON USER:: user2 
TO user1;

XACT_STATE(卡塔尔(英语:State of Qatar) 函数再次来到专门的学业的气象,1象征有Active Transaction,0代表从未Active Transaction,-1意味着有Active Transaction,不过有荒谬发生引致该职业未被提交。

通过试行EXECUTE AS 命令模拟客商的权杖,客户user1就运转在user2的安全上下文中,比方,user1在登陆数据库之后,模拟user2的权柄:

@@TRANCOUNT 
CURRENT_TRANSACTION_ID( ) 
XACT_STATE() 
EXECUTE AS USER = 'user2';

6,查看当前机械(Host)的名字(Machine Name和ID)

透过推行 REVERT 命令退出权限模拟,重返到客户原来的安全上下文中:

HOST_NAME () ,HOST_ID()
REVERT;

四,使用GZIP algorithm压缩多少和平解决压缩数量

貌似境况下,对于特种的管理职分,供给创立孤立顾客,给孤立客户付与特定的权力,并把模拟孤立客商的权柄赋予其余顾客,那一个人就有权力试行一定的治本职务。

COMPRESS ( expression ) 
DECOMPRESS ( expression )

 

在插入数据时,压缩数量,压缩之后的数据类型是varbinary(max卡塔尔(قطر‎

参照文书档案:

INSERT INTO player (name, surname, info )  
VALUES (N'Ovidiu', N'Cracium', COMPRESS(N'{"sport":"Tennis","age": 28,"rank":1,"points":15258, turn":17}')); 

Permissions (Database Engine)

在询问数据时,解压缩数据,将数据从varbinary(max卡塔尔(قطر‎强转为原始类型

GRANT Object Permissions (Transact-SQL)

SELECT _id, name, surname, datemodified, CAST(DECOMPRESS(info) AS NVARCHAR(MAX)) AS info  
FROM player; 

Basic SQL Server Security concepts - logins, users, and principals

五,调试函数

Basic SQL Server Security concepts - permissions and special principals: sa, dbo, guest

1,获取非凡音讯

在TSQL中,使用try 和 catch编写万分处理代码,在catch子句中,使用debug函数,能够赢得卓殊音信

--返回发生错误的代码行号(LineNumber)
ERROR_LINE ( ) 
--返回错误号(ErrorNumber)
ERROR_NUMBER ( ) 
@@ERROR 
--返回错误消息(ErrorMessage)
ERROR_MESSAGE ( ) 
--返回发生错误的SP Name
ERROR_PROCEDURE ( ) 
--返回错误的严重度(Error Severity)
ERROR_SEVERITY ( ) 
--返回错误的状态(Error State)
ERROR_STATE() 

在张开调解时,能够以下示例脚本代码,将充裕新闻记录在数量表中,以便进行代码的故障消灭

图片 4图片 5

-- SET XACT_ABORT ON will render the transaction uncommittable when the constraint violation occurs.
SET XACT_ABORT ON;  

BEGIN TRY  
    BEGIN TRANSACTION;  
        -- A FOREIGN KEY constraint exists on this table. This statement will generate a constraint violation error.
        DELETE FROM Production.Product  
        WHERE ProductID = 980;  
    -- If the delete operation succeeds, commit the transaction. The CATCH block will not execute.
    COMMIT TRANSACTION;  
END TRY  
BEGIN CATCH  
    -- Test XACT_STATE for 0, 1, or -1.  
    -- If 1, the transaction is committable.  
    -- If -1, the transaction is uncommittable and should be rolled back.
    -- XACT_STATE = 0 means there is no transaction and a commit or rollback operation would generate an error.

    -- Test whether the transaction is uncommittable.
    IF (XACT_STATE()) = -1  
    BEGIN  
        --Logging Exception info, as the transaction is in an uncommittable state. Rolling back transaction.
        SELECT  
            ERROR_NUMBER() AS ErrorNumber,  
            ERROR_SEVERITY() AS ErrorSeverity,  
            ERROR_STATE() AS ErrorState,  
            ERROR_PROCEDURE() AS ErrorProcedure,  
            ERROR_LINE() AS ErrorLine,  
            ERROR_MESSAGE() AS ErrorMessage;   
        ROLLBACK TRANSACTION;  
    END;  
    -- Test whether the transaction is active and valid.  
    IF (XACT_STATE()) = 1  
    BEGIN  
        --'The transaction is committable. Committing transaction.'  
        COMMIT TRANSACTION;     
    END;  
END CATCH;  
GO 

View Code

2,抛出极度音讯

在SQL Server 二〇一一及之后的本子中,使用 Throw 关键字替代RaiseError,用于抛出非常,并将实施调整权转移到Catch 代码块

THROW [error_number, error_message, error_state];

六,DBCC 命令

1,查看数据库的隔开分离等第

DBCC USEROPTIONS

 

 

参照文书档案:

Security Functions (Transact-SQL) 

Metadata Functions (Transact-SQL)

Configuration Functions (Transact-SQL)

System Functions (Transact-SQL)

本文由9159.com发布于www.9159.com,转载请注明出处:查看对象的ID和Name,Server实例级别的安全主体

关键词:

上一篇:没有了
下一篇:2.重启mysql服务即可