понедельник, 31 марта 2014 г.

sqlite3 команды



Если вы только собираетесь стать специалистом в области СУБД, то вам можно начать с SQLITE. Вы можете сделать какое-нибудь приложение "для себя". Возьмите Python и Django и реализуйте ведение расписание уроков. После того, как все готово: в базе данных есть таблицы и там есть нужные данные, встает вопрос: как перенести эту базу на место эксплуатации, например в школу? Все профессионалы делают для этого скрипты, что бы потом пропустить их через специальную утилиту и создать нужную вам копию базы на месте использования. Такая утилита есть в Oracle - SQLPLUS, в MS SQL это sqlcmd. Есть такая утилита и в SQLITE - это sqlite3. Создайте для этой утилиты такие скрипты - создание вашей базы, дампирования ее, восстановление и вы лучше начнете понимать администратора Субд в крупной организации и то, что он ждет от вас как разработчика. Он ждет скриптов. Ниже приведен файл HELP для утилиты sqlite3. 
 
C:\Documents and Settings\user>sqlite3
SQLite version 3.8.1 2013-10-17 12:57:35
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .help

.backup ?DB? FILE
Выполнить Бэкап базы DB (поумолчанию с именем "main") в файл с именем FILE
.bail ON|OFF
Stop after hitting an error.  Default OFF
.databases
Распечатать имена и файлы подключенных баз данных
.dump ?TABLE? ...  
Dump the database in an SQL text format If TABLE specified, only dump tables matching  LIKE pattern TABLE.
.echo ON|OFF
Turn command echo on or off
.exit 
Exit this program
.explain ?ON|OFF?
Turn output mode suitable for EXPLAIN on or off.  With no args, it turns EXPLAIN on.
.header(s) ON|OFF
Turn display of headers on or off
.help
Show this message
.import FILE TABLE
Import data from FILE into TABLE
.indices ?TABLE?
Show names of all indices If TABLE specified, only show indices for tables matching LIKE pattern TABLE.
.load FILE ?ENTRY?
Load an extension library
.log FILE|off
Turn logging on or off.  FILE can be stderr/stdout
.mode MODE ?TABLE?    
Set output mode where MODE is one of:
 csv            Comma-separated values
 column      Left-aligned columns.  (See .width)
 html           HTML code
 insert         SQL insert statements for TABLE
 line            One value per line
 list             Values delimited by .separator string
 tabs          Tab-separated values
 tcl      TCL list elements
.nullvalue STRING
Use STRING in place of NULL values
.output FILENAME
Send output to FILENAME
.output stdout
Send output to the screen
.print STRING... 
Print literal STRING
.prompt MAIN CONTINUE
Replace the standard prompts
.quit
Exit this program
.read FILENAME
Execute SQL in FILENAME
.restore ?DB? FILE
Restore content of DB (default "main") from FILE
.schema ?TABLE?
Show the CREATE statements
If TABLE specified, only show tables matching
LIKE pattern TABLE.
.separator STRING
Change separator used by output mode and .import
.show
Show the current values for various settings
.stats ON|OFF
Turn stats on or off
.tables ?TABLE?
Распечатать список таблиц. Если задано значение TABLE, печатаются таблицы, удовлетворяющие оператору LIKE шаблон TABLE
.timeout MS
Try opening locked tables for MS milliseconds
.trace FILE|off
Output each SQL statement as it is run
.vfsname ?AUX?
Print the name of the VFS stack
.width NUM1 NUM2 ...  
Set column widths for "column" mode
.timer ON|OFF
Turn the CPU timer measurement on or off

Основные принципы безопасности SQL Server Security - имя подключения (логины), пользователи и доверители

Основные принципы безопасности SQL Server Security - имя подключения (логины), пользователи и доверители


В этом посте я хотел бы поговорить о некоторых основных понятиях безопасности SQL Server. SQL Server имеет необычный дизайн, который может смутить пользователей, знакомых с функциями безопасности других программных продуктов, таких как ОС Microsoft Windows, в частности, разница между логинами и пользователями может запутать новых пользователей SQL Server.


Первое - в SQL Server есть две области безопасности - область сервера и область базы данных. Кроме того сервер захватывает некоторую часть области базы данных. Все работы выполняются в контексте некоторой базы данных, но, чтобы получить возможность сделать работу, нужно сначала получить доступ к серверу, а затем, получить  доступ к базе данных.

Доступ к серверу предоставляется через логины. Есть две основные категории логинов: с проверкой подлинности логинов через SQL Server и с проверкой подлинности логинов через Windows. Прошедшие проверку подлинности логины могут быть либо логины, отображенные на пользователей Windows, или логины, отображенные в группах Windows. Таким образом, чтобы иметь возможность подключиться к серверу, необходимо иметь доступ с помощью одного из этих типов.

Но одного логина не хватает, потому что работа, как правило, делается в базе данных, а базы данных являются отдельными областями. Доступ к базам данных предоставляется через пользователей базы данных.


Важное замечание: При описании поведения SQL Server, такие термины, как логин и пользователь не должно использоваться как синонимы - Логин это другая концепция, чем пользователь.

Пользователи, сопоставляются с логинами через их SID. Логин соответствует пользователю в базе данных , если их значения SID идентичны. Таким образом, у нас есть пользователи SQL и пользователи Windows; и последняя категория состоит из пользователей связанных с логинами  и связанных с группами логинов Windows . 

Давайте сделаем шаг назад и быстро повторим : логин обеспечивает доступ к серверу и может в дальнейшем получить доступ к базе данных; пользователь связанный с логином должен существовать в базе данных. Важно знать разницу между этими двумя понятиями логина и пользователя и не использовать эти термины как синонимы. 

Существование базы данных в качестве отдельной области позволяет отключить базу данных от экземпляра сервера и прикрепить к другому серверу SQL. Такая операция не проста, так как возможно, потребуется переназначить пользователей СУБД новым (логинам) именам входа в новом экземпляре. Это можно выполнить с помощью функции sp_change_users_login. Начиная с SQL Server 2005 SP2, такую операцию можно выполнить при помощи новой инструкции ALTER USERS.

Примечание: Пользователи, которые не отображаются в логинs в результате переезда базы данных известны как пользователи сироты. 

Another advantage is that databases as separate entities allow a better separation of distinct applications - applications can each be placed in their own database, making it harder to accidentally or maliciously access data under the control of another application.
This separation has an impact on the authorization model of SQL Server as well, as it may be expected. Permissions can be granted at both scopes: server and database. Permissions granted at server scope take effect regardless of what is the current database, but permissions granted at database scope are used only while working in that database. Server level permissions are the permissions that are assignable to logins, and database level permissions are the permissions assignable to users. To help with the management of permissions, some other entities than the logins and users we discussed so far can be used as the grantees of a permission. Collectively, in SQL Server, the entities that can be granted a permission are referred to as principals. Principals are separated into server principals and database principals according to their scope.

Еще одним преимуществом является то, что базы данных как отдельные объекты позволяютлучше разделение различных приложений - приложений каждый из них может быть размещен в собственной базе данных , что делает его труднее случайно или злонамеренно доступ к данным под контролем другого приложения . 

Это разделение имеет влияние на модели авторизации SQL Server , а также, как можно ожидать, . Разрешения могут быть предоставлены на обоих областей : сервер и база данных . Разрешения , предоставленные на области сервера вступили в силу независимо от того, является текущей базой данных , но разрешения, предоставленные в области базы данных используются только во время работы в этой базе данных. Разрешения на уровне сервера являются правами доступа , что могут быть присвоены логинов и разрешения на уровне базы данных являются правами доступа , назначаемые на пользователей . Чтобы помочь с управлением правами доступа , некоторые другие лица , чем логинов и пользователей , которые мы обсуждали до сих пор могут быть использованы как грантополучателями разрешения . В совокупности , в SQL Server , образования, которые могут быть предоставлены разрешения называются принципами . Принципы разделены на серверах-участниках и директоров баз данных в соответствии с их рамки .

Important Note: While the logins discussed so far grant access to the server and thus are having a role in the authentication process, the other server principals are only used for permission management and do not help with server authentication.
Examples of server principals besides the logins discussed previously are server roles and logins mapped to certificate or asymmetric keys. Examples of database principals are database roles (fixed and flexible), application roles, users mapped to certificate or asymmetric keys, and loginless users. All of these help with the assignment of the permissions. Loginless users (created using CREATE USER ... WITHOUT LOGIN) are a special case because they can be impersonated (application roles are similar, but terminology differs - approles are set, while loginless users are impersonated).
The last concept I want to discuss here is that of execution context. The execution context is how SQL Server keeps track of who you are. As it may be expected already, the execution context is formed of a server execution context and a database execution context - these are referred to as login token and user token. The login-user token pair determines who you are in the eyes of the system. The context is initially determined upon login and changes when you switch to a different database or when an impersonation takes place. For more information on the execution context and on impersonation mechanisms, which are topics that extend well beyond the scope of this post, you can have a look at my presentation from http://cmcgc.com/Media/WMP/261115/ and its relevant demo.

Важное примечание: В то время как логины , обсуждавшиеся до сих пор предоставить доступ к серверу и , таким образом, оказывают роль в процессе аутентификации , другие принципы сервера используются только для управления разрешениями и не помочь с проверки подлинности сервера .

 Примеры серверах-участниках , кроме логинов обсуждаемых ранее являются серверные роли и логины , отображенные на сертификат или асимметричными ключами . Примеры руководителей баз данных являются роли базы данных (фиксированные и гибкие ), роли приложений , пользователи , отображенные на сертификат или асимметричными ключами и пользователей loginless . Все это поможет с присвоением разрешений . Пользователи Loginless ( создана при помощи CREATE USER ... без входа ) представляют собой особый случай, потому что они могут быть олицетворением ( роли приложений похожи, но терминология отличается - approles установлены, в то время как loginless пользователи олицетворение ) .Последнее понятие, которое я хочу обсудить здесь является то, что из контекста выполнения . Контекст выполнения , как SQL Server отслеживает , кто вы есть . Как можно ожидать, уже , контекст выполнения сформирован из контекста выполнения сервера и контекста выполнения базы данных - они называют Войти маркера и пользователя маркера. Маркер пара Войти пользователь определяет , кто вы в глазах системы . Контекст изначально определяется при входе и изменений при переключении на другую базу данных или когдаолицетворение происходит . Для получения дополнительной информации о контексте выполнения и о механизмах олицетворения , которые темы , которые простираются далеко за рамки этого поста , вы можете взглянуть на моего выступления от http://cmcgc.com/Media/WMP/261115/ и его отношение демо .
 

суббота, 29 марта 2014 г.

Как конфигурировать SQL Server 2005 для удаленных подключений

По умолчанию SQL Server 2005 Express Edition и SQL Server 2005 Developer Edition не позволяют удаленные подключения.

Вы должны иметь возможность удаленных подключений для каждого экземпляра SQL Server 2005. Для этого, выполните:
  1. Click Start, point to Programs, point to Microsoft SQL Server 2005, point to Configuration Tools, and then click SQL Server Surface Area Configuration.
  2. On the SQL Server 2005 Surface Area Configuration page, click Surface Area Configuration for Services and Connections.
  3. On the Surface Area Configuration for Services and Connections page, expand Database Engine, click Remote Connections, click Local and remote connections, click the appropriate protocol to enable for your environment, and then click Apply.

    Note Click OK when you receive the following message:
    Changes to Connection Settings will not take effect until you restart the Database Engine service.
  4. On the Surface Area Configuration for Services and Connections page, expand Database Engine, click Service, click Stop, wait until the MSSQLSERVER service stops, and then click Start to restart the MSSQLSERVER service.
Enable the SQL Server Browser service
Если вы запускаете SQL Server 2005 используя имя экземпляра и не указываете конкретный порт TCP/IP в строке подключения, вы должны иметь доступ к службе SQL Server Browser, она позволит вам удаленные подключения. Например, SQL Server 2005 Express по умолчанию устанавливается с именем экземпляра Computer Name\SQLEXPRESS. You only have to enable the SQL Server Browser service one time, regardless of how many instances of SQL Server 2005 you are running. To enable the SQL Server Browser service, follow these steps.

Important These steps may increase your security risk. These steps may also make your computer or your network more vulnerable to attack by malicious users or by malicious software such as viruses. We recommend the process that this article describes to enable programs to operate as they are designed to, or to implement specific program capabilities. Before you make these changes, we recommend that you evaluate the risks that are associated with implementing this process in your particular environment. If you choose to implement this process, take any appropriate additional steps to help protect your system. We recommend that you use this process only if you really require this process.
  1. Click Start, point to Programs, point to Microsoft SQL Server 2005, point to Configuration Tools, and then click SQL Server Surface Area Configuration.
  2. On the SQL Server 2005 Surface Area Configuration page, click Surface Area Configuration for Services and Connections.
  3. On the Surface Area Configuration for Services and Connections page, click SQL Server Browser, click Automatic for Startup type, and then click Apply.

    Note When you click the Automatic option, the SQL Server Browser service starts automatically every time that you start Microsoft Windows.
  4. Click Start, and then click OK.
Note When you run the SQL Server Browser service on a computer, the computer displays the instance names and the connection information for each instance of SQL Server that is running on the computer. This risk can be reduced by not enabling the SQL Server Browser service and by connecting to the instance of SQL Server directly through an assigned TCP port. Connecting directly to an instance of SQL Server through a TCP port is beyond the scope of this article. For more information about the SQL Server Browser server and connecting to an instance of SQL Server, see the following topics in SQL Server Books Online:
  • SQL Server Browser Service
  • Connecting to the SQL Server Database Engine
  • Client Network Configuration

Create exceptions in Windows Firewall
These steps apply to the version of Windows Firewall that is included in Windows XP Service Pack 2 (SP2) and in Windows Server 2003. If you are using a different firewall, see your firewall documentation for more information.

If you are running a firewall on the computer that is running SQL Server 2005, external connections to SQL Server 2005 are blocked unless SQL Server 2005 and the SQL Server Browser service can communicate through the firewall. You must create an exception for each instance of SQL Server 2005 that you want to accept remote connections and an exception for the SQL Server Browser service.

SQL Server 2005 uses an instance ID as part of the path when you install its program files. To create an exception for each instance of SQL Server, you have to identify the correct instance ID. To obtain an instance ID, follow these steps:
  1. Click Start, point to Programs, point to Microsoft SQL Server 2005, point to Configuration Tools, and then click SQL Server Configuration Manager.
  2. In SQL Server Configuration Manager, click the SQL Server Browser service in the right pane, right-click the instance name in the main window, and then click Properties.
  3. On the SQL Server Browser Properties page, click the Advanced tab, locate the instance ID in the property list, and then click OK.
To open Windows Firewall, click Start, click Run, type firewall.cpl, and then click OK.

Create an exception for SQL Server 2005 in Windows Firewall

To create an exception for SQL Server 2005 in Windows Firewall, follow these steps:
  1. In Windows Firewall, click the Exceptions tab, and then click Add Program.
  2. In the Add a Program window, click Browse.
  3. Click C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, click Open, and then click OK.

    Note The path might be different, depending on where SQL Server 2005 is installed. MSSQL.1 is a placeholder for the instance ID that you obtained in step 3 of the previous procedure.
  4. Repeat steps 1 through 3 for each instance of SQL Server 2005 that needs an exception.

Create an exception for the SQL Server Browser service in Windows Firewall

To create an exception for the SQL Server Browser service in Windows Firewall, follow these steps:
  1. In Windows Firewall, click the Exceptions tab, and then click Add Program.
  2. In the Add a Program window, click Browse.
  3. Click the C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe executable program, click Open, and then click OK.

    Note The path might be different, depending on where SQL Server 2005 is installed.

среда, 26 марта 2014 г.

Импорт в Python

http://blog.amir.rachum.com/post/63666832095/python-importing

Операция импорт в программе на Python

Существует много способов импортировать пакеты и модули - некоторые типичны и их используют практически в каждом файле программы на Питоне, а некоторые не так хорошо известны.

Cheat Sheet

import foo
import foo.bar
from foo import bar
from foo import bar, baz
from foo import *
from foo import bar as fizz
from .foo import bar
 
foo = __import__("foo")
reload(foo)

Different Ways to Import

import foo
 
В Python это основная форма импорта. Как Python узнает, где искать модуль foo?

When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.pathsys.path is initialized from these locations:
  • the directory containing the input script (or the current directory).
  • PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
  • the installation-dependent default.
If there is a bar object (which could be anything from a function to a submodule) it can be accessed like a member: foo.bar. You can also import several modules in one line by doing import foo, bar, but it is considered good practice to put each import in a single line.
 
from foo import bar

This statement imports bar which could be anything that is declared in the module. It could be a function definition, a class (albeit a not-conventionally-named class) or even a submodule (which make foo a package). Notice that if bar is a submodule of foo, this statement acts as if we simply imported bar (if it was in Python’s search path). This means that a bar object is created, and its type is 'module'. No foo object is created in this statement.

Multiple members of foo can be imported in the same line like so:

from foo import bar, baz
 
The meaning of this is pretty intuitive: it imports both bar and baz from the module foo. bar and baz aren’t neccessarily the same types: baz could be a submodule and bar could be function, for that matter. Unlike importing unrelated modules, it’s perfectly acceptable to import everything from one module in the same line.
 
from foo import *

Sometimes foo contains so many things, that it becomes cumbersome to import them manually. Instead, you can just import * to import them all at the same time.
Don’t do this unless you know what you’re doing!
It may seem convenient to just import * instead of specific members, but it is considered bad practice. The reason is that you are in fact “contaminating” your global namespace. Imagine that you do import * on a package where someone unwittingly declared the following function:
def list():
    raise RuntimeError("I'm rubber, you're glue!")
When you do import *, this list definition will *override* the global, built-in list type and you’ll get very, very unexpected errors.
So it’s always better to know *exactly* what you’re importing. If you’re importing too much stuff from a certain package, you can either just suck it up or just import the package itself (import foo) and use the foo qualifier for every use.
An interesting good use for import * is in Django settings file hierarchy. It’s convenient there because you actually do want to manipulate the global namespace with imported settings.
from foo import bar as fizz
This one is far less common than what we covered so far, but still well known. It acts like from foo import bar, except instead of creating a bar object, it creates a fizz module with the same meaning. There are two main reasons to use this kind of statement: the first is when you’re importing two similarly named objects from two different modules. You then use import as to differentiate them, like so:
from xml import Parser as XmlParser
from json import Parser as JsonParser
 The other reason, which I’ve seen used a few times is when you import a lone-named function (or class) and use it extensively throughout your code and want to shorten its name.
from .foo import bar
Well, this escalated quickly.
This one is pretty rare and a lot of people are completely unaware of it. The only difference in this statement is that it uses a modified search path for modules. Namely, instead of searching the entire PYTHONPATH, it searches in the directory where the importing file lives. So if you have two files called fizz.py and foo.py, you can use this import in fizz, and it will import the correct file, even if you have another foo module in your PYTHONPATH.
What is this good for? Well, sometime you create modules with generic names like common, but you might also have a common package in the base of your project. Instead of giving different names, you can explicitly import the one closest to you.
You can also use this method to load modules from an ancestor in the directory tree by putting several dots. For example, from ..foo import Foo will search one directory up, from ...foo import Foo will search two directories up, etc.
foo = __import__("foo")
Ever wondered how can you import a module dynamically? This is how. Obviously you wouldn’t use it with an explicit string, but rather with a variable of some kind. Also notice that you have to explicitly assign the imported module to a variable, or you won’t have access to its attributes.
reload(foo)
This statement does exactly what it looks like. It reloads the foo module. It’s pretty useful when you have a console open playing with a bit of code you’re tweaking and want to continue without resetting your interpreter.
Note: If you used from foo import bar, it’s not enough to reload foo for bar to update. You need to both reload foo and call from foo import bar again.

Import Loops

An import loop would occur in Python if you import two or more modules in a cycle. For example, it in foo.py you would from bar import Bar and in bar.py you from foo import Foo, you will get an import loop:
Traceback (most recent call last):
  File "foo.py", line 1, in 
    from bar import Bar
  File "q:\Programming\Python\loops\bar.py", line 1, in 
    from foo import Foo
  File "q:\Programming\Python\loops\foo.py", line 1, in 
    from bar import Bar
ImportError: cannot import name Bar
When this happens to you, the solution is usually to move the common objects from foo.py and bar.py to a different file (say common.py). However, sometime there’s actually a real loop of dependencies. For example, a method in Bar needs to create a Foo instance and vice versa. When the dependency is in a limited scope, you should remember that you can use the import command wherever you want. Putting imports at the top of the file is the common convention, but sometimes you can solve import loops by importing in a smaller scope, like in a method definition.

Easter Eggs

What fun would an easter egg be if you didn’t try it by yourself? Try these and have fun!
import antigravity
import this
from __future__ import braces
import __hello__
from __future__ import barry_as_FLUFL

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога